Competition/Baekjoon

[백준] 1697번 자바 숨박꼭질

bisi 2020. 4. 19. 13:25
문제 출처 

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

 

1697번: 숨바꼭질

문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지

www.acmicpc.net

 

접근 방식 및 풀이

- BFS 활용하는 문제

[Algorithm/개념 정리] - [알고리즘] BFS DFS

불러오는 중입니다...

- 100,000개의 배열을 만들어 n+1, n-1, n*2 번째 방문체크

- 방문체크하다가 n=k인 시점에 Count 값 출력

 

 

 

 

 

소스 코드 
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
import java.util.Scanner;
 
public class Main {
 
    private static int start;
    private static int end;
 
    private static int[] visited;
 
    private static int res=0;
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        start = sc.nextInt();
        end = sc.nextInt();
        visited = new int[100001];
        bfs();
        System.out.println(visited[end]);
    }
    private static void bfs(){
        Queue<Integer> queue = new LinkedList<>();
 
        queue.offer(start);
 
        while (!queue.isEmpty()){
            int n = queue.poll();
            if(n==end) break;
            if(n > 0 && visited[n-1==0){
                queue.offer(n-1);
                visited[n-1= visited[n]+1;
            }
            if(n<100000 && visited[n+1]==0){
                queue.offer(n+1);
                visited[n+1= visited[n] +1;
            }
            if(n*2<=100000 && visited[n*2]==0){
                queue.offer(n*2);
                visited[n*2= visited[n] +1;
            }
        }
    }
}
 
 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 1806번 부분합  (0) 2020.04.20
[백준] 1644번 자바 소수의 연속합  (0) 2020.04.19
[백준] 1525번 자바 퍼즐  (0) 2020.04.18