본문 바로가기

PS

[BOJ]1697번 - 숨바꼭질

https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

 

알고리즘 분류 : 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