728x90

 0. [c++] 백준  - 


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


 1. 풀이




 2. 소스코드


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
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<cstring>
#include<queue>
 
using namespace std;
 
deque<pair<intint> > V;
bool visited[200001];
int N, K;
 
int bfs() {
    while (!V.empty()) {
        pair<intint> here = V.front();
        V.pop_front();
 
        if (here.first == K)
            return here.second;
 
        if (here.first * 2 <= K * 2 && !visited[here.first * 2]) {
            V.push_back({ here.first * 2, here.second + 1 });
            visited[here.first * 2= true;
        }
        if (here.first + 1 <= K * 2 && !visited[here.first + 1]) {
            V.push_back({ here.first + 1, here.second + 1 });
            visited[here.first + 1= true;
        }
        if (here.first > 0 && !visited[here.first - 1]) {
            V.push_back({ here.first - 1, here.second + 1 });
            visited[here.first - 1= true;
        }
    }
}
 
int main() {
    cin >> N >> K;
 
    memset(visited, falsesizeof(visited));
    V.push_back({ N,0 });
 
    cout << bfs() << endl;
}
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts