Baekjoon

Baekjoon 12851번 숨바꼭질 2

ppwag 2020. 12. 27. 13:19

문제

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

걸린 시간

- 실패

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, k;
    cin >> n >> k;
    // bfs
    queue<int> q;
    vector<int> visited(100001, 0);
    q.push(n);
    int way = 0;
    int time = -1;
    while(!q.empty()){
        time++;
        int size = q.size();
        for(int i = 0; i < size; i++){
            int x = q.front();
            q.pop();
            if(x == k) way++;
            visited[x] = 1;
            if(x-1 >= 0 && !visited[x-1]) q.push(x-1);
            if(x+1 <= 100000 && !visited[x+1]) q.push(x+1);
            if(x*2 <= 100000 && !visited[x*2]) q.push(x*2);
        }
        if(way) break;
    }
    cout << time << "\n" << way;
    return 0;
}

1697번 숨바꼭질에서 최단 시간의 방법의 개수를 추가로 묻는 bfs 문제이다.

방문 처리를 어느 시점에서 하느냐가 중요했는데, 정답이 될 수 있는 모든 방법의 개수를 구해야하므로 queue 에 같은 지점이 이미 있더라도 추가할 수 있게끔 구현해야한다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 17725번 세훈이의 선물가게  (0) 2021.01.23
Baekjoon 17070번 파이프 옮기기 1  (0) 2020.12.27
Baekjoon 1753번 최단경로  (0) 2020.12.26
Baekjoon 18119번 담어 암기  (0) 2020.12.25
Baekjoon 9935번 문자열 폭팔  (0) 2020.12.25

댓글