1 minute read



문제 분석


작성코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.io.*;
import java.util.*;

class Main {
    // 방문 배열 초기화, N, K의 최대 범위는 최대 100,000이다.
    static int[] visited = new int[100001];
    static int N;
    static int K;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        // BFS 함수 호출하여 N~K까지의 최소시간 계산
        int result = BFS(N);
        bw.write(result+"\n");

        bw.close();
        br.close();
    }

    static int BFS(int node) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(node);
        // N 위치는 1초부터 시작하기에 visited[N] 위치에 1로 초기화
        visited[node] = 1;
        while(!q.isEmpty()) {
            int now = q.poll();
            // BFS를 통해 K까지 탐색이 완료되면 반환 
            if(now == K) {
                return visited[now]-1;
            }
            // walk_back: 현재 위치-1 위치가 0보다 크고 방문하지 않았다면
            // -1 위치에 +1초를 저장하고 -1 위치를 큐에 저장
            if(0<=(now-1) && visited[now-1]==0) {
                visited[now-1] = visited[now]+1;
                q.add(now-1);
            }
            // walk_forward: 현재 위치+1 위치가 100,000 보다 작고 방문하지 않았다면
            // +1 위치에 +1초를 저장하고 +1 위치를 큐에 저장
            if((now+1)<=100000 && visited[now+1]==0) {
                visited[now+1] = visited[now]+1;
                q.add(now+1);
            }
            // warp: 현재위치*2 위치가 100,000보다 작거나 방문하지 않았다면
            // *2 위치에 +1초를 저장하고 *2 위치를 큐에 저장
            if((now*2)<=100000 && visited[now*2]==0) {
                visited[now*2] = visited[now]+1;
                q.add(now*2);
            }
        }
        return -1;
    }
}

출처


  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.