in.add()
[1697] 숨바꼭질 본문
문제 링크 : https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
문제 해결 방법
bfs를 사용해서 구현했다.
2%쯤에서 실패가 떴는데, N == K 일 때 바로 끝내도록 해서 통과할 수 있었다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int N, K, answer;
static boolean flag;
static boolean[] visit;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
flag = false;
visit = new boolean[100001];
hideAndSeek();
System.out.println(answer);
}
public static void hideAndSeek() {
if(N == K) return;
Queue<Integer> q = new LinkedList<>();
q.add(N);
visit[N] = true;
int cnt = 0;
while (!q.isEmpty()) {
int size = q.size();
cnt++;
for (int i = 0; i < size; i++) {
int cur = q.poll();
if (chk(cur * 2)) { // 순간이동 해볼까
q.add(cur * 2);
visit[cur * 2] = true;
}
if (chk(cur + 1)) { // 한 칸 앞으로 가볼까
q.add(cur + 1);
visit[cur + 1] = true;
}
if (chk(cur - 1)) { // 한 칸 뒤로 가볼까
q.add(cur - 1);
visit[cur - 1] = true;
}
if (flag) {
answer = cnt;
return;
}
}
}
}
public static boolean chk(int idx) {
if (idx == K) {
flag = true;
}
return idx >= 0 && idx <= 100000 && !visit[idx];
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[1931] 회의실 배정 (0) | 2021.10.02 |
---|---|
[1194] 달이 차오른다, 가자. (0) | 2021.09.29 |
[16928] 뱀과 사다리 게임 (0) | 2021.09.23 |
[2667] 단지 번호 붙이기 (0) | 2021.09.22 |
[17472] 다리 만들기 2 (0) | 2021.09.18 |
Comments