유블로그

BOJ 13549 숨바꼭질 3 java 본문

알고리즘

BOJ 13549 숨바꼭질 3 java

yujeong kang 2021. 6. 14. 23:23

BOJ 13549 숨바꼭질 3 java

 

https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		
		if(N == K) System.out.println(0);
		else {
			new Main().solve();
		}
		
	} // main
	
	static int N, K;
	void solve() {
		boolean[] visited = new boolean[100001];
		PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[1] == o2[1]) return o1[2]-o2[2];
				return o1[1]-o2[1];
			}
		});
		
		queue.add(new int[] {N, 0, 0});
		visited[N] = true;
		
		int order = 0;
		int[] dir = new int[] {-1, +1};
		while(!queue.isEmpty()) {
			order++;
			int[] p = queue.poll();
			if(p[0] == K){
				System.out.println(p[1]); 
				return;
			}
			int np = p[0] * 2;
			if(isInBound(np) && !visited[np]) {
				queue.add(new int[] {np, p[1], order});
				visited[np] = true;
			}
			for(int d = 0; d < 2; d++) {
				np = p[0]+dir[d];
				if(isInBound(np) && !visited[np]) {
					queue.add(new int[] {np, p[1]+1, order});
					visited[np] = true;
				}
			}
		}
	}
	
	boolean isInBound(int x) {
		if(x < 0 || x > 100000) return false;
		return true;
	}
}

 

제출을 너무 많이 해서 올려본다 ㅎ

 

풀긴 풀었지만 의문이 있다.

 

*2, +1, -1 순서로 PriorityQueue에 넣고 정렬 조건은 이동시간이 적은 순서, 같다면 먼저 들어온 것부터 하게 했다.

하지만 틀렸다고 해서

*2, -1, +1 순서로 큐에 넣었더니 통과,..


정렬조건에 문제가 있는 걸까?

우연히 통과된걸까

왜 순서로 결과가 다른지 모르겠다

 

 

'알고리즘' 카테고리의 다른 글

BOJ 9251 LCS Java  (0) 2021.06.17
BOJ 2580 스도쿠 Java  (0) 2021.06.17
BOJ 10026 적록색약 Java  (0) 2021.06.14
BOJ 1629 곱셈 Java  (0) 2021.06.10
BOJ 1520 내리막길 Java  (0) 2021.06.10