문제

설명

나는 이문제에서 다음과 같은 사항으로 인해 정말 많이 고생하였다

위 아래가 결과가 다르다.

위에는 맞게 출력되고 밑에 것은 런타임 에러가 뜬다.

이유는 p가 50001일 경우 p곱하기2는 범위를 넘어가는데 arr[p곱하기2]==0 에서 arr을 확인하려 했다가 값이 없어 런타임 에러가 뜬다.

코드

#include <queue>
#include <iostream>
using namespace std;
int arr[100001] = {0,};
int n,k;
queue <int>q;
int bfs()
{
    q.push(n);
    arr[n]=1;
    while (!q.empty()) {
        int p=q.front();
        q.pop();
        if(p==k){
            return(arr[p]-1);
        }
        if (p-1>=0&&arr[p-1]==0) {
            arr[p-1]=arr[p]+1;
            q.push(p-1);
        }
        if (arr[p + 1] == 0&& p<100000) {

            arr[p+1]=arr[p]+1;
            q.push(p+1);
        }
        if ((p * 2 <= 100000)&&  (arr[p*2]==0)) {
            arr[p*2]=arr[p]+1;
            q.push(p*2);
        }
    }
}
int main() {
    cin >> n >> k;
    cout << bfs();
}

'알고리즘 > BFS' 카테고리의 다른 글

[C++][백준 14226번][백준 이모티콘][bfs][dp]  (0) 2019.02.10

+ Recent posts