알고리즘
[java] 백준 1697:숨바꼭질
_DAMI
2023. 4. 11. 19:33
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
처음에 dfs로 접근하려다가 안되겠어서 답지를 보니 bfs로 푸는 거였다. 최단시간 거리를 구하는건 bfs인데 dfs만 하다보니 순간 까먹었다...(경험부족으로 더 공부해야겠다)
완성된 코드
import java.util.*;
public class Main {
public static int[] visited = new int[100001];
public static int n,m;
public static void BFS(int n) {
Queue<Integer> q = new LinkedList<>();
q.add(n);
visited[n] = 1;
while(!q.isEmpty()) {
int now = q.poll();
for(int i=0; i<3; i++) {
int next;
if(i==0)
next = now-1;
else if(i==1)
next = now+1;
else
next = now*2;
if(next==m) {
System.out.println(visited[now]);
return;}
if(0<=next && next<100001&&visited[next]==0 ) {
q.add(next);
visited[next]=visited[now]+1;
}
}
}}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
n=kb.nextInt();
m=kb.nextInt();
if(n==m) { System.out.println(0);}
else {BFS(n);}
}
}
백준 런타임 에러 이유
계속해서 런타임 에러가 나서 진짜 한시간동안 삽질한거 같다....... 원인은
if(visited[next]==0 && 0<=next && next<100001 ) {
q.add(next);
visited[next]=visited[now]+1;
}
if문 안에 조건의 순서였다 vistied[next]==0을 뒷 순서로 넣으니 됐다 이유는 뭐지..?? 잘 모르겠다..
아마도 0인 경우가 많아서 시간을 많이 잡아먹는건가?
에러 잡으려고 노력한 흔적... 나 진짜 집착광공인듯