일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker 완전 삭제
- m1 docker
- codeup 1020 java
- 가운데 글자 가져오기 파이썬
- 청년 Ai Big Data 아카데미
- codeup 1020 자바
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 트리의 지름 java
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- 청년 AI Big Data 아카데미 13기
- 최단 경로 알고리즘
- 트리의 지름 자바
- 핸즈온 머신러닝
- 코드업 1020 java
- docker remove
- 나누어 떨어지는 숫자 배열 java
- docker 삭제
- 가운데 글자 가져오기 java
- 최소 스패닝 트리 자바
- 빅데이터분석기사
- 최소 스패닝 트리
- 코드업 1020 자바
- 가운데 글자 가져오기 자바
- 프로그래머스 가운데 글자 가져오기 파이썬
- 나누어 떨어지는 숫자 배열 python
- 빅분기실기
- m1 docker install
- 프로그래머스 가운데 글자 가져오기 python
- 가운데 글자 가져오기 python
- 프로그래머스 가운데 글자 가져오기 자바
- Today
- Total
NineTwo meet you
[백준/자바] 13549 숨바꼭질 3 본문
문제
수빈이는 동생과 숨바꼭질을 하고 있다.
수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다.
수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다.
N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
예제 입력 1
5 17
예제 출력 1
2
설명
해당 문제는 다음 알고리즘 분류에 속하는 문제다.
- 그래프 이론
- 자료 구조
- 그래프 탐색
- 너비 우선 탐색
- 다익스트라
- 0-1 너비 우선 탐색
이전 1697 숨바꼭질과 12851 숨바꼭질 2와 다른 점은 X위치에 있는 수빈이가 이동시 X-1과 X+1은 1초가 걸리지만
X*2는 0초가 걸린다는 사실이다.
우선 수빈이가 동생보다 큰 값의 위치의 서있는 경우 X-1로만 이동 가능하므로 n-k가 답이 된다.
if(k <= n) {
System.out.println(n-k);
}
이 문제 역시 1697 숨바꼭질문제처럼 가장 빠른 시간만 구하는 문제이기 때문에
12851 숨바꼭질 2처럼 중복을 허용해 문제를 풀 필요가 없다.
따라서 visited배열을 통해 방문했는지 여부를 판단하며 문제를 해결해 나가면 된다.
이동하는 거리를 다음과 같은 배열을 사용해 구한다.
String의 앞의 값을 곱하고 뒤의 값은 더해서 사용한다.
static String dx[] = {"2 0", "1 -1", "1 1"};
이때 뒤의 값의 절댓값을 살펴보면
X*2 이동 시에는 0이고
X+1과 X-1 이동 시에는 1인 것을 확인할 수 있다.
이 값은 이동했을 때 각각 걸린 시간과 같아서 시간의 값에 더해주는 역할로도 사용했다.
코드
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준/자바] 14226 이모티콘 (0) | 2021.01.15 |
---|---|
[백준/자바] 13913 숨바꼭질 4 (0) | 2021.01.15 |
[백준/자바] 12851 숨바꼭질 2 (0) | 2021.01.15 |
[백준/자바] 1697 숨바꼭질 (0) | 2021.01.15 |
[백준/자바] 1707 이분 그래프 (0) | 2021.01.11 |