ALGOSPOT

algospot JUMPGAME 외발 뛰기

ppwag 2020. 8. 19. 23:53

문제

https://algospot.com/judge/problem/read/JUMPGAME

걸린 시간

00 : 44 : 55

풀이

C++

#include <stdio.h>
#include <iostream>
#include <string.h>
#define MAX 101
using namespace std;

int n;
int land[MAX][MAX];
int visited[MAX][MAX];

bool canFinish(int r, int c){ // row, col
    int v = land[r][c]; // value
    if(r < n and c < n){
        if(v == 0)
            return true;

        if(!visited[r][c]){
            visited[r][c] = 1;
            if(canFinish(r+v, c) or canFinish(r, c+v))
                return true;
            else
                return false;
        }
    }
    return false;
}

int main(){
    int C;
    scanf("%d", &C);
    while(C--){
        scanf("%d", &n);
        for(int r = 0; r < n; r++)
            for(int c = 0; c < n; c++)
                cin >> land[r][c];
        memset(visited, 0, sizeof(visited));
        if(canFinish(0, 0))
            printf("%s\n", "YES");
        else
            printf("%s\n", "NO");
    }
    return 0;
}

종만북 dp 단원 난이도 하 문제이다.

다음과 같은 실수들로 구현, 디버깅, 오류해결에 시간이 많이 걸렸다.

  1. 입력 크기보다 작은 크기의 배열 선언함.
  2. visited 배열을 선언해 두고 방문할 때 값을 변경하지 않았음.
  3. 이동한 좌표가 범위를 벗어나는지 확인하는 조건문의 범위를 잘못 설정함.

1번은 배열의 크기를 100으로 해도 전혀 문제될 것이 없어 보이는데 런타임 에러가 난다. cin 으로 입력을 받아서일까?

댓글