알고스팟 쉬운문제 하나만 질문할께 형들
아르고스팟질문(114.71)
2015-11-03 19:35
추천 0
JUMPGAME 이란 문젠대
![viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b38177a16fb3dab004c86b6f1a1232ae65b0ad2433808df24674120c0fe81742d55c6fda53d9a872cfc2854267286c05626c96c22933be9902]()
![viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b38177a16fb3dab004c86b6f1a1232ae65b0ad2433808df24674120c0fe81742d55c6fda53d9a872cfc285426728310b616bc3927e33be9902]()
아래는 내가 쓴 코드야...
동적계획법이란걸 공부했고 그걸 활용해서 해봤어... 근데 결과는 시간초과... 하 ...
적절한 코멘트좀 달아줄수 있남 ㅎㅎ 뭣때메 시간초과가 나오는지 이해가 잘 안가네 ...
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int num;
int arr[100][100];
int cache[100][100];
int jump(int x, int y);
int main(void)
{
int te1st1Case; //test라고 치면 디씨에 글이 안올려져서 te1st1Case라고 한것
scanf("%d", &te1st1Case);
while (te1st1Case)
{
te1st1Case--;
scanf("%d", &num);
memset(arr, 0, sizeof(arr));
memset(cache, 0, sizeof(cache));
for (int i = 0; i < num; i++)
for (int j = 0; j < num; j++)
scanf("%d", &arr[i][j]);
if (jump(0, 0))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
int jump(int x, int y)
{
if (x >= num || y >= num)
return 0;
if (x == num - 1 && y == num - 1)
return 1;
if (cache[x][y] != 0)
return cache[x][y];
int jumpSize = arr[x][y];
return cache[x][y] = (jump(x + jumpSize, y) || jump(x, y + jumpSize));
}
dp 맞냐? - DCW
맞네 - DCW
최초에 0 0 들어간 jump 함수에서 cache값에 0이 아니면 그 값을 내보내라고 했는데, 그 값을 내려면 계속 재귀로 돌아가는 jump가 다 끝나야 하고, 들렸던 곳도 다시 들리는 최악의 경우가 있어서 타임아웃이 뜨는듯 합니당
이건 그냥 완전탐색 같은데용?!
dp는 이렇게 풀면 안괴지 - DCW
일단 역추적한다고 생각해보고 풀어봐 너무 재귀나 부분뮨제에 집착하지말고 - DCW
엑윽엑... 책에 있는 논리대로 한건데도 시간초과가 엑윽... 흠... 역추적을 하라라... 그게 혹시 백트래킹이란 기법인가 형?
cache 를 확인하는 부분에서 최악으 ㅣ경우가 발생한다라... 고민좀 더 해볼께 형
근데 구글링 검색해서 푼 사람들 보면 답이 나랑 비슷하단말야 그사람들은 되고 난 왜 시간초과지 으악
한번 들린곳을 안들리게 해
끝지점에 1번으로 도달가능한 모든곳을 뒤져 2중포문으로 ,시작점체크해 체크안됬으면 1번으로체크한곳으로 도달가능한 모든곳을 뒤져 2중포뮨으로2번으로체크해 , 시작점체크해, 2번으로체크한곳 도달가능한곳 다뒤져,.. 반복 이게 왜 dp냐면 끝지점에 도달가능한 부분들은 1번째이든 2번째이든간에 끝지점에 도달하는 부분해를 공유하고 있거든 - DCW
코드보니까 검색가지치기가 없네
모든 칸이 1이라고 생각해봐 어떻게 되겠나
해가 풀어지는 모양은 끝지점근처부터 시작해서 점점 격자가 채워지면서 결국엔 시작점이 채워지며 알고리즘 종료되는 모양일고다 - DCW
내가 모바일이라 코드로 쓸수가없군 ㅉㅉ 열심히해봐라 씹죶아 - DCW
풀었다!!!고마워
문제는 cache를 전혀 의도대로 활용핮 ㅣ않은거였어