[ BOJ / C++ ] 1697번 숨바꼭질

황승환·2021년 7월 21일
0

C++

목록 보기
19/65

이번 문제는 BFS 알고리즘을 활용하여 푸는 문제였다.
DFS & BFS
BFS에 대한 설명은 이 글로 대신한다.

  • 기존 BFS에서 사용하는 큐에 time을 세기 위해 pair를 사용해 2개의 값을 넣었다.

Code

#include <iostream>
#include <queue>
#include <algorithm>
#define MAX 100001
using namespace std;

int start, destination;
bool visited[MAX]={0};

void Input(){
    cin>>start>>destination;
}

void BFS(int cur, int destination){
    queue<pair<int, int>> q;
    q.push(make_pair(cur, 0));
    visited[cur]=true;
    while(!q.empty()){
        int path=q.front().first;
        int time=q.front().second;
        q.pop();
        if(path==destination)
            cout<<time<<endl;
        if(path+1<MAX&&!visited[path+1]){
            visited[path+1]=true;
            q.push(make_pair(path+1, time+1));
        }
        if(path-1>=0&&!visited[path-1]){
            visited[path-1]=true;
            q.push(make_pair(path-1, time+1));
        }
        if(path*2<MAX&&!visited[path*2]){
            visited[path*2]=true;
            q.push(make_pair(path*2, time+1));
        }
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    BFS(start, destination);
    return 0;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글