ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1697 숨바꼭질 - Java
    알고리즘 문제 풀이 2024. 5. 15. 02:39

    문제 - 숨바꼭질

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

     

     

     

    접근 방법

     

    이 문제는 bfs 문제인데 1차원 배열로 푸는 bfs문제이다 

    생각 보다 쉬운 문제이다 

    시작점에서 +1, -1, *2를 해주면서 몇번째인지 기록하면서 방문하면 될 것 같다


    코드 작성

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
    
    public class Main {
        static int N;
        static int K;
        static int[] map;
        static Queue<Integer> queue = new LinkedList<>();
    
        public static void main(String[] args) {
            try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                N = Integer.parseInt(st.nextToken());
                K = Integer.parseInt(st.nextToken());
                map = new int[100001];
                map[N] = 1;
                queue.add(N);
    
                System.out.println(bfs());
    
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    
        public static int bfs() {
            while (!queue.isEmpty()) {
                int poll = queue.poll();
                if (poll == K) {
                    return map[K] - 1;
                }
                if (poll - 1 >= 0 && map[poll - 1] == 0) {
                    map[poll - 1] = map[poll] + 1;
                    queue.add(poll - 1);
                }
                if (poll + 1 < 100001 && map[poll + 1] == 0) {
                    map[poll + 1] = map[poll] + 1;
                    queue.add(poll + 1);
                }
                if (poll * 2 < 100001 && map[poll * 2] == 0) {
                    map[poll * 2] = map[poll] + 1;
                    queue.add(poll * 2);
                }
            }
            return -1;
        }
    }

    문제 풀고 느낀점

     

    이 문제는 bfs 문제를 응용한 문제인데 2차원 배열이 아닌 1차원 배열 문제이다 -> 신선했다

    문제를 푸면서 처음 시작을 1로 시작을 해서 마지막 결과 값에 -1를 해주는 것을 깜빡하고 계속 왜 안되는거지? 라고 하면서 시간을 지체 했다....

    '알고리즘 문제 풀이' 카테고리의 다른 글

    [백준] 11047 동전 0 - Java  (0) 2024.05.21
    [SWEA] 1249 보급로 - Java  (0) 2024.05.21
    [백준] 7576 토마토 - Java  (0) 2024.05.15
    [백준] 2178 미로 탐색 - Java  (0) 2024.05.14
    [백준] 1926 그림 - Java  (0) 2024.05.14
Designed by Tistory.