Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 후위표기
- 자바 순열 코드
- Java
- 자바 재귀 조합
- 자바입출력
- 재귀
- 자바
- Interface
- 자바스크립트 이벤트중지
- 재귀함수
- 자바스크립트 이벤트처리
- java 내부 클래스
- 알고리즘 그래프
- java lambda
- 자바 조합 재귀
- parseInt()
- str to char array
- 알고리즘
- char to str
- 조합 재귀
- jquery 필터선택자
- 순열 재귀
- 순열코드
- jquery 이벤트 처리
- jquery dom 계층 선택자
- jquery 속성선택자
- inner class
- java Collections.sort()
- 서로소
- 상속
Archives
- Today
- Total
유블로그
BOJ 13549 숨바꼭질 3 java 본문
BOJ 13549 숨바꼭질 3 java
https://www.acmicpc.net/problem/13549
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 |