반응형
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 |
Tags
- codeup 1020 java
- 가운데 글자 가져오기 java
- 프로그래머스 가운데 글자 가져오기 자바
- docker 삭제
- m1 docker
- 핸즈온 머신러닝
- 가운데 글자 가져오기 파이썬
- 청년 AI Big Data 아카데미 13기
- docker remove
- 최소 스패닝 트리
- codeup 1020 자바
- 최소 스패닝 트리 자바
- 코드업 1020 자바
- 나누어 떨어지는 숫자 배열 java
- 청년 Ai Big Data 아카데미
- 트리의 지름 java
- 최단 경로 알고리즘
- 프로그래머스 가운데 글자 가져오기 파이썬
- 나누어 떨어지는 숫자 배열 python
- docker 완전 삭제
- 가운데 글자 가져오기 자바
- 빅분기실기
- m1 docker install
- 가운데 글자 가져오기 python
- 빅데이터분석기사
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 코드업 1020 java
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- 트리의 지름 자바
- 프로그래머스 가운데 글자 가져오기 python
Archives
- Today
- Total
NineTwo meet you
[백준/자바] 1697 숨바꼭질 본문
반응형

문제
수빈이는 동생과 숨바꼭질을 하고 있다.
수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다.
수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다.
순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다.
N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
예제 입력 1
5 17
예제 출력 1
4
설명
해당 문제는 다음과 같은 알고리즘 분류에 해당하는 문제다.
-
그래프 이론
-
그래프 탐색
-
너비 우선 탐색
수빈이의 위치가 X일 때 X-1, X+1, 2*X의 위치로 이동할 수 있다.
방문 여부를 표시하는 visited와 해당 위치까지 이르는 시간을 표시하는 num변수를 설정한다.
이때, 수빈과 동생 모두 100000까지 거리를 이동할 수 있으므로 배열의 범위는 100001까지 지정한다.
위치 이동시 무조건 1초씩 이동하기 때문에 num++한다.
코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.LinkedList; | |
import java.util.Queue; | |
import java.util.Scanner; | |
public class BOJ1697 { | |
static int min; | |
static boolean visited[]; | |
static int num[]; | |
static int X[] = {-1,1,2}; | |
static Queue<Integer> q = new LinkedList<>(); | |
public static void main(String[] args) { | |
Scanner scanner = new Scanner(System.in); | |
int n = scanner.nextInt(); | |
int m = scanner.nextInt(); | |
visited = new boolean[100001]; | |
num = new int[100001]; | |
bfs(n,m); | |
} | |
private static void bfs(int start, int end) { | |
q.add(start); | |
while(!q.isEmpty()) { | |
int cur = q.poll(); | |
if(cur == end) { | |
System.out.println(num[end]); | |
return; | |
} | |
for(int i = 0; i < 3; i++) { | |
int x = 0; | |
if(i == 2) { | |
x = cur * X[i]; | |
}else { | |
x = cur + X[i]; | |
} | |
// 범위 초과 | |
if(x < 0 || 100000 < x) { | |
continue; | |
} | |
if(!visited[x]) { | |
q.add(x); | |
num[x] = num[cur] + 1; | |
visited[x] = true; | |
if(x == end) { | |
System.out.println(num[end]); | |
return; | |
} | |
} | |
} | |
} | |
} | |
} |
반응형
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준/자바] 13549 숨바꼭질 3 (0) | 2021.01.15 |
---|---|
[백준/자바] 12851 숨바꼭질 2 (0) | 2021.01.15 |
[백준/자바] 1707 이분 그래프 (0) | 2021.01.11 |
[백준/자바] 4963 섬의 개수 (0) | 2021.01.11 |
[백준/자바] 11724 연결 요소의 개수 (0) | 2021.01.11 |