동적계획법으로 풀어본 코드 아래에 첨부합니다.
답안 제출해보니 시간초과라고 뜨는데 .. 이유를 알 수 있을까요?
답안번호는 329045입니다.
도움 부탁드립니다
제 코드
#include <stdio.h>
int mem[100][100];
int arr[100][100];
int n;
int jump2(int x, int y){
if (x >= n || y >= n){ return 0; }
if (x == n - 1 && y == n - 1){ return 1; }
if (mem[x][y]==1){ return 1; }
int jump = arr[x][y];
return mem[x][y] = jump2(x + jump, y) || jump2(x, y + jump);
}
int main(void){
int tc = 0;
scanf("%d", &tc);
for (int t = 0; t < tc; t++){
scanf("%d", &n);
if (tc < 0 || tc>50){ return -1; }
if (n < 2 || n>100){ return -1; }
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++)
{
mem[i][j] = 0;
scanf("%d", (arr[i]) + j);
}
}
if (jump2(0, 0)){ printf("YES\n"); }
else printf("NO\n");
}
}
제 생각엔 이 문제에서 mem 효과를 얻으려면, 실패한 것에 대한 값을 저장하는 것이 중요한 부분인 것 같은데용.
위 코드에서는 성공했을 때(1) 에만 return 1 하고 있네요.
실패한(0) 경우에도 바로 return 해줄 수 있도록, mem에 대한 초기화를 다른 값으로 해주면 되지 않을까 싶어요.
lamourse
JUMPGAME 질문
[[problem:JUMPGAME]]
동적계획법으로 풀어본 코드 아래에 첨부합니다.
답안 제출해보니 시간초과라고 뜨는데 .. 이유를 알 수 있을까요?
답안번호는 329045입니다.
도움 부탁드립니다
제 코드
11년 전