boj)1697 - 숨바꼭질

2020. 10. 17. 23:43PS/boj

import java.io.*;
import java.util.*;

public class boj_1697 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static boolean[] v = new boolean[100001];
    static int[] dx = {-1, 1};
    static Queue<int[]> q = new LinkedList<>();

    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        System.out.println(bfs(N, K));
    }

    private static int bfs(int n, int k) {
        if (n == k) return 0;

        v[n] = true;
        q.offer(new int[] {n, 0});

        int nx;
        while (!q.isEmpty()) {
            int[] now = q.poll();

            for (int i = 0; i < 3; i++) {
                if (i == 2) nx = now[0] * 2;
                else nx = now[0] + dx[i];

                if (nx < 0 || nx > 100000 || v[nx]) continue;
                if (nx == k) return now[1] + 1;

                q.offer(new int[] {nx, now[1] + 1});
                v[nx] = true;
            }

        }
        return 0;
    }
}

 

- 실패

- 진짜 어려운 문제 아니고 생각 충분히 할 수 있는데 못 푼게 넘 아쉽고 짜증난다.

- 앞으로 모든 문제는 타임어택 1시간으로 잡고 품

 

- bfs를 이차원 배열에서만 돌렸지만 1차원에서도 bfs라 생각하고 돌리면 된다

- +, -, * 을 for문에서 i 값에 따라 다르게 해줬음

- q에 넣을때 class 를 따로 생성할 필요 없이 그냥 Int[] 배열 자체로 넣음

 

'PS > boj' 카테고리의 다른 글

boj)10026 - 적록색약  (0) 2020.10.21
boj)7569 - 토마토  (0) 2020.10.19
boj)4179 - 불!  (0) 2020.10.17
boj)1926 - 그림  (0) 2020.10.15
boj)10866 - 덱  (0) 2020.10.14