X
1697번 - 숨바꼭질
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int N, K; // 수빈, 동생
static Queue<Time> queue = new LinkedList<>();
static int time = 0;
static boolean[] visit;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
visit = new boolean[2 * K];
Arrays.fill(visit, false);
if (N >= K) {
time = N - K;
System.out.println(time);
sc.close();
return;
}
// N < K
travling(N, 0);
System.out.println(time);
sc.close();
}
static void travling(int start, int count) {
// 이미 방문한적이 있다
// = 나보다 count가 적은 상태에서 누군가 들렸다는 것. 그렇다면 그쪽에서 이미 최소값이 나왔을 것임.
if (visit[start]) {
return;
}
visit[start] = true;
// 앞
if ((start + 1) <= 100000 && !(start + 1 > K)) {
queue.add(new Time(start + 1, count + 1));
}
// 뒤
if ((start - 1) >= 0) {
queue.add(new Time(start - 1, count + 1));
}
// 순간이동
if ((2 * start) <= 100000 && !(2 * start > 2 * K)) {
queue.add(new Time(2 * start, count + 1));
}
while (!queue.isEmpty()) {
Time next = queue.poll();
if (next.location == K) {
time = next.cnt;
while(!queue.isEmpty()) {
queue.poll();
}
}else {
travling(next.location, next.cnt);
}
}
}
}
class Time {
int location;
int cnt;
public Time(int location, int cnt) {
this.location = location;
this.cnt = cnt;
}
}
최근 글
같은 카테고리의 다른 글
- 9933번 민균이의 비밀번호
- 1764번 듣보잡
- 1475번 방 번호
- 1157번 단어공부
- 최소값과 최대값
- 구간 합 구하기
- 최소값
- 1181번 - 단어 정렬
- 11652번 - 카드
- 2169번 - 로봇 조종하기
- 2178번 - 미로 탐색
- 9084번 - 동전
- 2098번 - 외판원 순회
- 11049번 - 행렬 곱셉 순서
- 2302번 - 극장 좌석
- 1495번 - Day of Mourning
- 11060번 - 점프 점프
- 5557번 - 1학년
- 1697번 - 숨바꼭질
- 2631번 - 줄세우기
- 11004번 - K번째 수
- 9507번 - Generations of Tribbles
- 1904번 - 01타일
- 10942번 - 팰린드롬
- 10164번 - 격자상의 경로
- 2011번 - 암호코드
- 11066번 - 파일합치기
- 11054번 - 가장 긴 바이토닉 수열
- 11724번 - 연결 요소 개수
- 11403번 - 경로찾기
- 2667번 - 단지번호붙이기
- 3187번 - 양치기 꿍
- 2225번 - 합분해
- 1965번 - 상자넣기
- 1937번 - 욕심쟁이 판다
- 1890번 - 점프
- 1520번 - 내리막길