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

"DFS와 BFS"

Posted by Yongmin on July 21, 2021

문제

숨바꼭질

풀이

큐를 이용해서 완전 탐색을 하는 코드이다. x-1, x+1, 2*x에 해당하는 값들을 queue에 넣고, 이미 넣었던 함수라면 어차피 반복되니 메모리를 사용하지 않기 위해 visit함수로 check를 해주면서 메모리를 절약해주었다. 완전탐색으로 원하는 값이 나올 때 depth를 출력하고 종료한다.

소스 코드

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
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <queue>

using namespace std;

int main(){
    int N, M;
    scanf("%d %d", &N, &M);
    
    queue<pair<int, int>> q;
    
    q.push(make_pair(N, 0));
    
    bool visit[100001];
    
    for(int i = 0; i<100001; i++){
        visit[i] = false;
    }
    
    visit[N] = true;
    
    while(!q.empty()){
        int x = q.front().first;
        int y = q.front().second;
        
        if(x == M){
            printf("%d\n", y);
            return 0;
        }
        q.pop();
        
        if(visit[x-1] == false && x-1 >= 0 && x-1 < 100001){
            q.push(make_pair(x-1, y+1));
            visit[x-1] = true;
        }
        
        if(visit[x+1] == false && x+1 >= 0 && x+1 < 100001){
            q.push(make_pair(x+1, y+1));
            visit[x+1] = true;
        }
         
        if(visit[2*x] == false && 2*x >= 0 && 2*x < 100001){
            q.push(make_pair(2*x, y+1));
            visit[2*x] = true;
        }
        

    }
     
}



# # #