File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed
weekly/week08/BOJ_13549_숨바꼭질3 Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change 1+ package boj .boj_13549 ;
2+
3+ import java .io .BufferedReader ;
4+ import java .io .IOException ;
5+ import java .io .InputStreamReader ;
6+ import java .util .ArrayDeque ;
7+ import java .util .Queue ;
8+ import java .util .StringTokenizer ;
9+
10+ public class Main {
11+
12+ static final int LIMIT = 1000001 ;
13+
14+ public static void main (String [] args ) throws IOException {
15+ // 위치를 노드, 걸린 시간을 간선으로 간주하면 BFS로 풀 수 있다. 최간 시간을 구하는 것이기 때문.
16+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
17+ StringBuilder sb = new StringBuilder ();
18+
19+ int n , k ;
20+ String line = br .readLine ();
21+ StringTokenizer st = new StringTokenizer (line );
22+ n = Integer .parseInt (st .nextToken ());
23+ k = Integer .parseInt (st .nextToken ());
24+
25+ int [] visited = new int [LIMIT ];
26+ Queue <Integer > q = new ArrayDeque <>();
27+ visited [n ] = 1 ;
28+ q .offer (n );
29+
30+ while (!q .isEmpty ()) {
31+ int x = q .poll ();
32+
33+ if (x == k ) break ;
34+
35+ if (2 * x < LIMIT && visited [2 * x ] == 0 ) {
36+ visited [2 * x ] = visited [x ];
37+ q .offer (2 * x );
38+ }
39+
40+ if (x - 1 >= 0 && visited [x - 1 ] == 0 ) {
41+ visited [x - 1 ] = visited [x ] + 1 ;
42+ q .offer (x - 1 );
43+ }
44+
45+ if (x + 1 < LIMIT && visited [x + 1 ] == 0 ) {
46+ visited [x + 1 ] = visited [x ] + 1 ;
47+ q .offer (x + 1 );
48+ }
49+ }
50+
51+ sb .append (visited [k ] - 1 );
52+ System .out .println (sb );
53+ }
54+ }
You can’t perform that action at this time.
0 commit comments