• toc {:toc}

문제

μˆ˜λΉˆμ΄λŠ” λ™μƒκ³ΌΒ μˆ¨λ°”κΌ­μ§ˆμ„ ν•˜κ³  μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” ν˜„μž¬ 점 N(0 ≀ N ≀ 100,000)에 있고, 동생은 점 K(0 ≀ K ≀ 100,000)μ—Β μžˆλ‹€.Β μˆ˜λΉˆμ΄λŠ” κ±·κ±°λ‚˜ μˆœκ°„μ΄λ™μ„ ν•  수 μžˆλ‹€. λ§Œμ•½, 수빈이의 μœ„μΉ˜κ°€ X일 λ•Œ κ±·λŠ”λ‹€λ©΄ 1초 후에 X-1 λ˜λŠ” X+1둜 μ΄λ™ν•˜κ²Œ λœλ‹€. μˆœκ°„μ΄λ™μ„ ν•˜λŠ” κ²½μš°μ—λŠ” 1초 후에 2*X의 μœ„μΉ˜λ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€.

μˆ˜λΉˆμ΄μ™€ λ™μƒμ˜ μœ„μΉ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μˆ˜λΉˆμ΄κ°€ 동생을 찾을 수 μžˆλŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ΄ λͺ‡ 초 후인지 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫 번째 쀄에 μˆ˜λΉˆμ΄κ°€ μžˆλŠ” μœ„μΉ˜ Nκ³Ό 동생이 μžˆλŠ” μœ„μΉ˜ Kκ°€ μ£Όμ–΄μ§„λ‹€.Β Nκ³Ό KλŠ” μ •μˆ˜μ΄λ‹€.

좜λ ₯

μˆ˜λΉˆμ΄κ°€ 동생을 μ°ΎλŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ„ 좜λ ₯ν•œλ‹€.

좜처:https://www.acmicpc.net/problem/1697

풀이

1차원일 뿐 BFSκ°€ μ‚¬μš©λ˜λŠ” 것은 λ˜‘κ°™λ‹€.

BFSλŠ” κ°€μž₯ λΉ λ₯Έ 것 λΆ€ν„° 순차적으둜 큐에 λ“€μ–΄μ˜€κΈ° λ•Œλ¬Έμ— κ·Έλ ‡λ‹€.

#include <bits/stdc++.h>
using namespace std;
 
int dist[100002];
int n, k;
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> k;
    fill(dist, dist+100001, -1);
    dist[n] = 0;
    queue<int> q;
    q.push(n);
    while(dist[k] == -1){
        auto cur = q.front(); q.pop();
        for(int i : {cur-1, cur+1, cur*2}){
            if(i < 0 || i > 100000) continue;
            if(dist[i] != -1) continue;
            dist[i] = dist[cur] + 1;
            q.push(i);
        }
    }
    cout << dist[k];
}