article thumbnail image
Published 2022. 1. 18. 14:38

문제 설명

문제 링크

http://icpc.me/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

풀이

다익스트라와 bfs로 풀 수 있다.

다익스트라로 풀고 다른 사람 코드를 구경하다가 그냥 bfs로도 풀 수 있는 것을 보고 다시 bfs로 풀어봤다.

bfs로 풀이하려면 거리가 0인 부분, 1인 부분... 순서로 bfs를 돌려야 하기 때문에 큐에 미리 다 넣어놔야 한다.

코드

bfs코드

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5;
int dist[N + 5];

int main() {
    int n, k; scanf("%d %d", &n, &k);
    queue<int> q;
    q.push(n);
    dist[n] = 1;
    while (!q.empty()) {
        int cur = q.front();
        q.pop();
        if (cur == k) {
            printf("%d", dist[cur] - 1);
            break;
        }
        for (int i = cur * 2; i <= N && !dist[i]; i *= 2) dist[i] = dist[cur], q.push(i);
        if (cur - 1 >= 0 && !dist[cur - 1]) dist[cur - 1] = dist[cur] + 1, q.push(cur - 1);
        if (cur + 1 <= N && !dist[cur + 1]) dist[cur + 1] = dist[cur] + 1, q.push(cur + 1);
    }
}

다익스트라 코드

#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
const int N = 2e5;
const int INF = 1e8;
int dist[N + 5];

int main() {
    fill(dist, dist + N + 1, INF);
    int n, k; scanf("%d %d", &n, &k);
    priority_queue<pii, vector<pii>, greater<>> q;
    q.push({0, n});
    dist[n] = 0;
    while (!q.empty()) {
        int cur = q.top().second;
        q.pop();
        if (cur == k) break;
        
        if (cur * 2 <= N && dist[cur] < dist[cur * 2]) {
            dist[cur * 2] = dist[cur];
            q.push({dist[cur * 2], cur * 2});
        }

        if (cur + 1 <= N && dist[cur] + 1 < dist[cur + 1]) {
            dist[cur + 1] = dist[cur] + 1;
            q.push({dist[cur + 1], cur + 1});
        }

        if (cur - 1 >= 0 && dist[cur] + 1 < dist[cur - 1]) {
            dist[cur - 1] = dist[cur] + 1;
            q.push({dist[cur - 1], cur - 1});
        }
    }
    printf("%d", dist[k]);
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[1007] 벡터 매칭  (0) 2022.01.19
백준[14942] 개미  (0) 2022.01.19
백준[1865] 웜홀  (0) 2022.01.18
백준[7662] 이중 우선순위 큐  (0) 2022.01.14
백준[1238] 파티  (0) 2022.01.11
복사했습니다!