✏️ Algorithm/알고리즘 풀이

1697번 숨바꼭질 - C++

미미누 2022. 7. 29. 01:01

✅️[문제]
https://www.acmicpc.net/problem/1697

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net


✅️[풀이]

❗️주의할점은 인덱스가 200000을 넘기면 안된다는 것이다! 인덱스가 200000을 넘어가면 OutofBound 에러가 생기므로 주의하자.
✅️ 각각의 좌표마다 +1, -1, ×2를 해주어 좌표를 누적하여 더한후, k에 도달하면 출력해주면 된다!


✅️[코드]

#include <bits/stdc++.h>

using namespace std;

int arr[2000100];
int t[3] = {-1, 1, 2};
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    queue<int> q;
    
    int n,k;
    cin >> n >> k;
    arr[n] = 1;
    q.push(n);
    while(!q.empty()){
        if(arr[k]) break;
        int x = q.front(); q.pop();
        for(int i=0; i<3; i++){
            if(i == 2 && x*t[i] <= 200000 && !arr[x*t[i]]) {
                arr[x*t[i]] = arr[x] + 1;
                q.push(x*t[i]);
            }
            else if(i<2 && x+t[i] >= 0 && x+t[i] <=200000 && !arr[x+t[i]]){
                arr[x+ t[i]] = arr[x] +1;
                q.push(x+t[i]);
            }

        }
    }
    cout << arr[k] - 1;
}


✅️[소감]
이런 문제가 오히려 내게 까다로운 것 같다😭

'✏️ Algorithm > 알고리즘 풀이' 카테고리의 다른 글

1012번 유기농 배추 - C++  (0) 2022.07.31
10026번 적록색약 - C++  (0) 2022.07.31
7576번 토마토 - C++  (0) 2022.07.29
4179번 불! - C++  (0) 2022.07.29
2504번 괄호의 값 - C++  (0) 2022.07.27