Skip to content

Commit

Permalink
[Gold V] Title: 숨바꼭질 3, Time: 12 ms, Memory: 3308 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
belowyoon committed Apr 20, 2024
1 parent 2acdae7 commit 36e6793
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
30 changes: 30 additions & 0 deletions 백준/Gold/13549. 숨바꼭질 3/README.md
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>

36 changes: 36 additions & 0 deletions 백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.cc
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;
}

0 comments on commit 36e6793

Please sign in to comment.