old/Algorithm

백준 13913 어렵지 않지만 계속 런타임 에러난다

hYhY1234 2020. 5. 18. 22:23
728x90
// https://www.acmicpc.net/problem/13913
#include<iostream>
#include<queue>
using namespace std;
int n;
int k;

int check[200001]; // 깊이 저장??
int from[200001];
int arr[200001];
void track(int last){
    arr[0] = last;
    int next = from[last];
    int i = 1;

    while(next != -1){
        // cout << next << " ";
        arr[i] = next;
        next= from[next];
        i++;
    }

    // cout << i;
    for(int k = i -1; k >=0; k--){
        cout << arr[k] << " ";
    }
}

void bfs(){
    int step = 0;
    queue<int> q;
    for(int i = 0; i < 200001; i++){
        check[i] = -1;
    }

    check[n] = 0; //
    from[n] = -1;
    if(n+1 < 200001){
        check[n+1] = 1;
        from[n+1] = n;
        q.push(n+1);
    }

    if(n-1 >= 0){
        check[n-1] = 1;
        from[n-1] = n;
        q.push(n-1);
    }

    if(n*2 < 200001){
        check[n*2] = 1;
        from[n*2] = n;
        q.push(n*2);
    }

    while(!q.empty()){
        int nn = q.front();
        q.pop();
        if(nn == k){
            cout<< check[nn] <<"\n";
            track(k);
            break;
        }

        if(nn +1 < 200001 && check[nn +1 ] == -1){
            check[nn + 1] = check[nn] + 1;
            from[nn + 1] = nn;
            q.push(nn + 1);
        }

        if(nn - 1 >= 0 && check[nn - 1] == -1){
            check[nn - 1] = check[nn] + 1;
            from[nn - 1] = nn;
            q.push(nn-1);
        }

       if(nn * 2 < 200001 && check[nn * 2] == -1){
            check[nn * 2] = check[nn] + 1; 
            from[nn * 2] = nn;
            q.push(nn * 2);
        }
    }
}

int main(){
    cin >> n >> k;

    bfs();

    return 0;
}

www.acmicpc.net/problem/13913

 

13913번: 숨바꼭질 4

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

www.acmicpc.net

 

숨박꼭질 경로 구하는건데, 뭔가 지금 너무 졸려서 그런건지 

범위가 넘 애매한것같이 느껴진다. 계속 런타임 에러가 나는데, 정말 어디서 문제가 난건지 알수가없다. n만 저 범위면 되는건지, 백준 저지 답은 200000사이로 해뒀던데, 꼭 그렇게 되야할 이유가 있는지 의문이다. 계속 런타임에러가 났던거보면 이문제때문이었던 것 같기도한데, 아예 나중에 맨정신으로 풀어야겠다.