728x90
반응형
https://www.acmicpc.net/problem/17071
기존 숨바꼭질과 비슷한 문제입니다.
단, 동생은 현재 이동속에 부스터가 붙어 +1, 이전값 +2, 이전값 +3 이런식으로 이동거리가 증가됩니다.
수빈이가 동생을 만날 수 없고, 찾는 위치가 500,000을 넘는 경우에는 -1을 출력하면 됩니다.
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, k;
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());
System.out.print(n == k ? 0 : bfs());
}
public static int bfs() {
Queue<Integer> queue = new LinkedList<>();
boolean[][] visited = new boolean[2][500001];
queue.add(n);
int move = 1;
while(!queue.isEmpty()) {
k += move;
if(k > 500000) {
return -1;
}
if(visited[move % 2][k]) {
return move;
}
int size = queue.size();
for(int i = 0; i < size; i++) {
int x = queue.poll();
for(int nx : new int[]{x + 1, x - 1, x << 1}) {
if(nx == k) {
return move;
}
if(nx < 0 || nx > 500000 || visited[move % 2][nx]) {
continue;
}
visited[move % 2][nx] = true;
queue.add(nx);
}
}
move++;
}
return -1;
}
}
728x90
반응형
'백준 > 15001 - 20000' 카테고리의 다른 글
[백준] 17615번 : 볼 모으기 (0) | 2024.11.11 |
---|---|
[백준] 18185번 : 라면 사기 (0) | 2024.03.21 |
[백준] 16916번 : 부분 문자열(JAVA) (0) | 2021.08.26 |
[백준] 17298번 : 오큰수(JAVA) (0) | 2021.08.17 |
[백준] 18129번 : 이상한 암호코드(JAVA) (0) | 2021.08.15 |
댓글