ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준1697 : 숨바꼭질] Java,BFS
    백준 알고리즘 2018. 11. 10. 17:23

    문제는 결국 입력1부터 입력2까지의 최소 거리를 구하는 것입니다. 


    최단 거리인 만큼 BFS로 풀어보았습니다.


    1. 수빈이의 위치(조건이 3가지 존재)를 큐에 넣어가면서 이동

    2. 배열에 방문 여부를 체크해서 중복되지 않도록 하기

    3. 이동할때마다 1씩 더해서 거리체크하기


    수빈이의 위치가 변하는 조건은 

    현재 위치-1 , 현재 위치+1, 현재 위치*2입니다.


    BFS에서 현재 위치가 입력2와 같으면 거리를 출력해주도록 했습니다.



    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
    58
    59
    60
    61
    62
    63
    64
    package mnth_11;
    import java.util.Scanner;
    import java.util.Queue;
    import java.util.LinkedList;
     
    public class BJ1697_BFS {
        static int start,end;
        static Queue<Integer> q = new LinkedList<>();
        static int visited[];
        static int dst[];
        static int MAX = 100001;
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan = new Scanner(System.in);
            visited = new int[MAX];
            dst = new int[MAX];
            start = scan.nextInt();
            end = scan.nextInt();
            
            BFS(start);
        }
     
        static void BFS(int s)
        {
            q.offer(s);
            visited[s] = 1
            dst[s] = 0;
            
            while(q.isEmpty()==false
            {
                int now = q.poll();
                if(now==end)
                    System.out.println(dst[now]);
                if(now-1>=0
                {
                    if(visited[now-1== 0)
                    {
                    q.offer(now-1);
                    visited[now-1= 1;
                    dst[now-1= dst[now]+1;
                    }
                }
                if(now+1<MAX) 
                {
                    if(visited[now+1== 0)
                    {
                    q.offer(now+1);
                    visited[now+1= 1;
                    dst[now+1= dst[now]+1;
                    }
                }
                if(now*2<MAX) 
                {
                    if(visited[now*2== 0)
                    {
                    q.offer(now*2);
                    visited[now*2= 1;
                    dst[now*2= dst[now]+1;
                    }
                }
            }
        }
    }
     
    cs


Designed by Tistory.