https://www.acmicpc.net/problem/1697
알고리즘 분류 : BFS, DFS, 백트래킹
더보기
public class Main {
static Myscanner sc = new Myscanner();
static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
static int min = 100001;
static boolean[] visited = new boolean[100001];
public static void main(String[] args) {
int N = sc.nextInt();
int K = sc.nextInt();
Queue<Integer> q = new LinkedList<>();
q.offer(N);
int depth = 0;
while (!q.isEmpty()) {
int size = q.size();
for (int sz = 0; sz < size; sz++) {
int here = q.poll();
int[] switching = { here + 1, here - 1, here * 2 };
if (here == K) {
out.println(depth);
out.close();
while (!q.isEmpty())
q.poll();
break;
}
if (visited[here])
continue;
visited[here] = true;
for (int idx = 0; idx < 3; idx++) {
if (switching[idx] >= 0 && switching[idx] < 100001) {
if (!visited[switching[idx]]) {
q.offer(switching[idx]);
}
}
}
}
depth++;
}
out.close();
}
}
BFS를 통한 최단거리를 찾는 문제로 해석하여 풀었다.
DFS로 풀려다 보니 런타임 에러/시간 초과가 나길래.. BFS로 전환해서 푸니 해결 완료..
'PS' 카테고리의 다른 글
[BOJ] 1012번 : 유기농 배추(DFS) (0) | 2017.06.07 |
---|---|
[BOJ] 1260번 : DFS와 BFS (0) | 2017.06.07 |
[BOJ] 2568번 : 전깃줄 - 2 (0) | 2017.06.01 |
[BOJ] 1051번 - 숫자 정사각형 (0) | 2017.05.29 |
[BOJ] 2512번 - 예산 (0) | 2017.05.29 |