Written by
Sunwoo Han
on
on
[JAVA]1697. 숨바꼭질
1697번: 숨바꼭질
설명
가장 빠른 시간, 즉 최단거리를 구하는 문제와 유사하므로 BFS로 푼다.
지나간 경로를 확인하기 위해 배열 visit
을 만든다.
자세한 설명은 코드에 주석으로 달아놓았다.
코드
import java.util.*;
public class Main {
static int n, k;
static int[] visit = new int[100001];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt(); // 수빈
k = sc.nextInt(); // 동생
bfs();
}
public static void bfs() {
Queue<Integer> que = new LinkedList<Integer>();
que.add(n); // 시작 위치 저장
visit[n] = 1; // 시작 위치 체크
while(!que.isEmpty()) {
n = que.poll(); // 현재 위치 꺼냄
if (n == k) break; // 동생과 위치가 같으면 종료
//한 칸 앞으로 이동했을 때
if(n + 1 <= 100000 && visit[n + 1] == 0) {
que.add(n + 1); // 현재 위치 저장
visit[n + 1] = visit[n] + 1; // 이동한 위치의 순서 저장
}
//한 칸 뒤로 이동했을 때
if(n - 1 >= 0 && visit[n - 1] == 0) {
que.add(n - 1);
visit[n - 1] = visit[n] + 1;
}
//두 배 앞으로 이동했을 때
if(n * 2 <= 100000 && visit[n * 2] == 0) {
que.add(n * 2);
visit[n * 2] = visit[n] + 1;
}
}
System.out.println(visit[k] - 1); // 0이 아닌 1에서 시작하기 때문에 -1
}
}
Comments
ALGORITHM 의 다른 글
-
[JAVA]1037. 약수 04 Jan 2021
-
[JAVA]1018. 체스판 다시 칠하기 04 Jan 2021
-
[JAVA]1010. 다리 놓기 04 Jan 2021
-
[JAVA]7576. 토마토 05 Dec 2020
-
[JAVA]1697. 숨바꼭질 04 Dec 2020
-
[JAVA]5337. 웰컴 03 Dec 2020
-
[JAVA]5217. 쌍의 합 03 Dec 2020
-
[JAVA]4892. 숫자 맞추기 게임 03 Dec 2020
-
[JAVA]4101. 크냐? 02 Dec 2020
-
[JAVA]2558. A+B - 2 02 Dec 2020
-
[JAVA]1550. 16진수 02 Dec 2020
-
[JAVA]압축 25 Oct 2020
-
[JAVA]빗물 25 Oct 2020
-
[JAVA]유기농 배추 22 Oct 2020
-
[JAVA]미로 탐색 21 Oct 2020
-
[JAVA]옥상 정원 꾸미기 08 Oct 2020
-
[JAVA]탑 08 Oct 2020
-
[JAVA]안정적인 문자열 07 Oct 2020
-
[JAVA]균형잡힌 세상 07 Oct 2020
-
[JAVA]괄호의 값 06 Oct 2020
-
[JAVA]쇠막대기 06 Oct 2020
-
[JAVA]카드2 05 Oct 2020
-
[JAVA]큐 2 05 Oct 2020
-
[JAVA]제로 05 Oct 2020
-
[JAVA]괄호 04 Oct 2020
-
[JAVA]AC 04 Oct 2020
-
[JAVA]회전하는 큐 04 Oct 2020
-
[JAVA]스택 수열 04 Oct 2020
-
[JAVA]덱 03 Oct 2020
-
[JAVA]큐 03 Oct 2020
-
[JAVA]스택 03 Oct 2020
-
[JAVA]애너그램 만들기 03 Oct 2020
-
[JAVA]키로거 02 Oct 2020
-
[JAVA]요세푸스 문제 02 Oct 2020
-
[JAVA]방 번호 02 Oct 2020
-
[JAVA]방 배정 01 Oct 2020
-
[JAVA]Strfry 28 Sep 2020
-
[JAVA]에디터 28 Sep 2020
-
[JAVA]개수 세기 28 Sep 2020
-
[JAVA]알파벳 개수 28 Sep 2020
-
[JAVA]별 찍기 - 9 27 Sep 2020
-
[JAVA]별 찍기 - 8 27 Sep 2020
-
[JAVA]별 찍기 - 7 27 Sep 2020
-
[JAVA]별 찍기 - 6 27 Sep 2020
-
[JAVA]별 찍기 - 5 27 Sep 2020
-
[JAVA]별 찍기 - 4 27 Sep 2020
-
[JAVA]별 찍기 - 3 26 Sep 2020
-
[JAVA]별 찍기 - 2 26 Sep 2020
-
[JAVA]별 찍기 - 1 26 Sep 2020
-
[JAVA]카드 역배치 26 Sep 2020
-
[JAVA]핸드폰 요금 26 Sep 2020
-
[JAVA]숫자의 개수 25 Sep 2020
-
[JAVA]숫자 25 Sep 2020
-
[JAVA]일곱 난쟁이 25 Sep 2020
-
[JAVA]대표값2 25 Sep 2020
-
[JAVA]홀수 25 Sep 2020
-
[JAVA]최댓값 24 Sep 2020
-
[JAVA]윷놀이 24 Sep 2020
-
[JAVA]주사위 세개 24 Sep 2020
-
[JAVA]윤년 24 Sep 2020
-
[JAVA]세수정렬 24 Sep 2020
-
[JAVA]시험 성적 23 Sep 2020
-
[JAVA]사칙연산 23 Sep 2020
-
[JAVA]고양이 23 Sep 2020
-
[JAVA]Hello World 23 Sep 2020
-
[JAVA]A+B 23 Sep 2020
-
[JAVA]콜라츠 추측 22 Aug 2020
-
[JAVA]평균 구하기 22 Aug 2020
-
[JAVA]하샤드 수 21 Aug 2020
-
[JAVA]핸드폰 번호 가리기 21 Aug 2020
-
[JAVA]행렬의 덧셈 20 Aug 2020
-
[JAVA]x만큼 간격이 있는 n개의 숫자 20 Aug 2020
-
[JAVA]직사각형 별찍기 11 Aug 2020