๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš“ Self Study/๐Ÿ”“ BaekJoon

๋ฐฑ์ค€ BaekJoon (์ˆจ๋ฐ”๊ผญ์งˆ, 1697๋ฒˆ) C++

by UKHYUN22 2022. 1. 11.
728x90

 

BFS ์ฒ˜๋Ÿผ ๊ฐ€๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. DFS์ฒ˜๋Ÿผ ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋‹ค. ์ฃผ๋ณ€์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ณ ๋ ค๋ฅผ ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” node์™€ ๋งŒ๋‚˜๋ฉด break ํ•˜๊ฒŒ ํ•˜๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    vector<int> visited(100010, 0);
    vector<int> path(100010, 0);
    queue<int> q;

    int start = 0, end = 0;
    cin >> start >> end;

    q.push(start);
    visited[start] = 1;
    
    while(!q.empty()) {
        int node = q.front();
        if(node == end) break;
        q.pop();

        if(visited[node+1] == 0 && node + 1 >= 0 && node + 1 < 100001) {
            q.push(node+1);
            visited[node+1] = 1;
            path[node+1] = path[node] + 1;
        } 
        if(visited[node-1] == 0 && node - 1 >= 0 && node - 1 < 100001) {
            q.push(node-1);
            visited[node-1] = 1;
            path[node-1] = path[node] + 1;
        } 
        if(visited[node*2] == 0 && node*2 >= 0 && node*2 < 100001){
            q.push(node * 2);
            visited[node*2] = 1;
            path[node*2] = path[node] + 1;
        }

    }

    cout << path[end];

    return 0;
}