-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold V] Title: 숨바꼭질 3, Time: 12 ms, Memory: 3308 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
66 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# [Gold V] 숨바꼭질 3 - 13549 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/13549) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 3308 KB, 시간: 12 ms | ||
|
||
### 분류 | ||
|
||
0-1 너비 우선 탐색, 너비 우선 탐색, 데이크스트라, 그래프 이론, 그래프 탐색, 최단 경로 | ||
|
||
### 제출 일자 | ||
|
||
2024년 4월 21일 01:12:43 | ||
|
||
### 문제 설명 | ||
|
||
<p>수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.</p> | ||
|
||
<p>수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.</p> | ||
|
||
### 입력 | ||
|
||
<p>첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.</p> | ||
|
||
### 출력 | ||
|
||
<p>수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.</p> | ||
|
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <vector> | ||
#include <queue> | ||
|
||
using namespace std; | ||
|
||
int n, k; | ||
int main() { | ||
ios_base::sync_with_stdio(0); | ||
cin.tie(0); | ||
|
||
cin >> n >> k; | ||
priority_queue<pair<int, int>> pq; | ||
vector<int> dp(100001, 100001); | ||
pq.push({0, n}); | ||
int cnt = 0; | ||
while (!pq.empty()) { | ||
int x = pq.top().second; | ||
dp[x] = -pq.top().first; | ||
pq.pop(); | ||
if (x == k) break; | ||
if (x-1 >= 0 && dp[x-1] > dp[x]+1) { | ||
pq.push({-(dp[x]+1), x-1}); | ||
} | ||
if (x+1 <= 100000 && dp[x+1] > dp[x]+1) { | ||
pq.push({-(dp[x]+1), x+1}); | ||
} | ||
if (x*2 <= 100000 && dp[x*2] > dp[x]) { | ||
pq.push({-(dp[x]), x*2}); | ||
} | ||
} | ||
|
||
cout << dp[k]; | ||
return 0; | ||
} |