728x90
처음 코드
import java.util.*;
import java.io.*;
public class Main {
public static int n, k; // n: 수빈이 위치, k: 동생 위치
public static int[] arr = new int[100_001]; // 좌표
public static boolean[] visit = new boolean[100_001];
public static int[] col = {1, -1};
public static Queue<Integer> q = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
bfs(n);
System.out.println(arr[k]);
}
public static void bfs(int num) {
boolean result = true;
q.offer(num);
arr[num] = 0;
visit[num] = true;
while (!q.isEmpty()) {
if (!result) {
break;
}
int nowLocation = q.poll();
for (int i = 0; i < 2; i++) {
int port = nowLocation + col[i];
int port2 = nowLocation * 2;
// if (port >= 21 || port2 >= 21) {
// continue;
// }
if (port < 0 || port >= 100_001) {
continue;
}
if (port2 < 0 || port2 >= 100_001) {
continue;
}
if (arr[port2] == -1 && !visit[port2]) {
// System.out.println(port2);
q.offer(port2);
visit[port2] = true;
arr[port2] = arr[nowLocation] + 1;
}
if (arr[port] == -1 && !visit[port]) {
q.offer(port);
visit[port] = true;
arr[port] = arr[nowLocation] + 1;
}
if (port == k || port2 == k) {
result = false;
break;
}
}
}
}
}
728x90
'백준 오답노트 > 그래프와 순회' 카테고리의 다른 글
백준 - 그래프와 순회 나이트의 이동 7652문제 / BFS풀이, 오답 (0) | 2023.02.21 |
---|---|
백준 - 그래프와 순회 1012 유기농 배추 문제 / DFS풀이, 오답 (2) | 2023.01.08 |
백준 - 그래프와 순회 2606 바이러스 문제 / 문제풀이 (0) | 2023.01.04 |
백준 - 그래프와 순회 1260 DFS와 BFS문제 / 문제풀이, 해설 링크 (0) | 2023.01.04 |