-
[ 백준 ] [ 자바 ][ 숨박꼭질] 1697코딩/알고리즘 2019. 6. 16. 19:36
런타임 에러가 자꾸 나서 뭔가했는데
if 문에서 맨 좌측에 visited배열을 참조 하게끔 선언해놓아서
범위 이상값을 참조하게 되는 경우도 있어 런타임 에러가 뜨는 것이였다.
처음에는 dfs로 진행하다가 스택오버플로우를 겪게 되서 bfs로 진행했는데
과거에 작성했던 코드보다는 깔끔해진것같다.
package back; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Position{ int position; Position(int position){ this.position = position; } } public class Main_backjoon_1697_숨박꼭질_retry { static int N; static int K; static int TIME; static boolean[] VISITED =new boolean[1000001]; static Queue q = new LinkedList(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); K = sc.nextInt(); move(); } public static void move() { q.add(new Position(N)); VISITED[N] = true; boolean findFlag = false ; while(!q.isEmpty()) { int qsize = q.size(); for(int s = 0 ; s< qsize; s++) { Position p = q.poll(); //System.out.println(p.position); if( p.position == K) { findFlag = true; break; } for(int i = 0 ; i <3 ; i++) { int pos = 0; if(i == 0) { pos = p.position * 2; } //순간이동 else if(i == 1) { pos = p.position + 1; } else if(i == 2) { pos = p.position - 1; } if( pos <= 100000 && pos >= 0 && !VISITED[pos] ) { VISITED[pos] = true; q.add(new Position(pos)); } } } if( findFlag ) { System.out.println(TIME); return ; } TIME += 1; } } }
'코딩 > 알고리즘' 카테고리의 다른 글
[ 백준 ][ 자바 ][ 3055 ] 탈출 (0) 2019.06.19 [ 백준 ] [ 자바 ][ 1931 ] 회의실 배정 (0) 2019.06.18 [백준][자바][17144] 미세먼지 안녕! (0) 2019.04.21 5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) 2019.04.12 [ 백준 ][ 자바][ 16234 ] 인구이동 (0) 2019.04.05