-
[java] 백준 1697:숨바꼭질알고리즘 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인 경우가 많아서 시간을 많이 잡아먹는건가?
에러 잡으려고 노력한 흔적... 나 진짜 집착광공인듯
'알고리즘' 카테고리의 다른 글
[java] LeetCode 234. Palindrome Linked List (0) 2023.04.12 [java] 1021: 회전하는 큐 (0) 2023.04.11 [java] 백준 11724: 연결 요소의 개수 (0) 2023.04.11 [java] 백준 13023: ABCDE (0) 2023.04.11 [java] 백준 10845 : 큐, 10828 : 스택 (0) 2023.04.11