반응형
현재 위치에서 지나갈 수 있는 경로는 무조건 push 해준 다음에, pop할 때마다 지금 도착한 장소의 count 값을 1씩 증가시켜줬습니다. k에 도착하는 지점이 모두 pop되면, break를 걸어주었습니다.
#include <iostream>
#include <queue>
#define INF 987654321
using namespace std;
int n, k, f = INF;
int visit[100001] = { 0 };
int main() {
scanf("%d %d", &n, &k);
queue<pair<int, int>> q;
q.push({ n, 0 });
while (!q.empty()) {
int x = q.front().first;
int c = q.front().second;
if (f == INF && x == k) f = c;
if (c > f) break;
visit[x]++;
q.pop();
if (x > 0 && !visit[x - 1]) q.push({ x - 1, c + 1 });
if (x < 100000 && !visit[x + 1]) q.push({ x + 1, c + 1 });
if (2 * x < 100001 && !visit[2 * x]) q.push({ 2 * x, c + 1 });
}
printf("%d\n%d", f, visit[k]);
}
반응형
'Algorithm' 카테고리의 다른 글
백준 15558 : 점프 게임 (0) | 2021.11.12 |
---|---|
C언어 멱집합 구하기 : 반복문(iteration)과 재귀(recursion) (0) | 2021.11.12 |
백준 9019 : DSLR (0) | 2021.11.12 |
백준 4435 : 숫자 맞추기 (0) | 2021.11.12 |
백준 15644 : 구슬 탈출 3 (0) | 2021.11.12 |