본문 바로가기

PS/그 외 다른 사이트

[알고스팟 JUMPGAME] 외발뛰기 C++

728x90

algospot.com/judge/problem/read/JUMPGAME

 

algospot.com :: JUMPGAME

외발 뛰기 문제 정보 문제 땅따먹기를 하다 질린 재하와 영훈이는 땅따먹기의 변종인 새로운 게임을 하기로 했습니다. 이 게임은 그림과 같이 n*n 크기의 격자에 각 1부터 9 사이의 정수를 쓴 상

algospot.com

동적계획법이 정말 도저히 이해가 안가서 종만북 이라는 알고리즘 책을 보기 시작했다.

종만북에 나온 문제가 웹에도 있으니 종만북 공부하면서 푼 코드들을 업로드할 예정

종만북보고 내가 따로 코드를 작성하는거라 종만북 답지랑은 아마 다를것임

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
 
int c, n;
int arr[100][100];
int dp[100][100];
 
int jump(int x, int y) {
    //기저사례 : 마지막칸에 도착한경우
    if (x == n - 1 && y == n - 1return 1;
    //기저사례 : 게임판 밖을 나간경우
    if (x >= n || y >= n) return 0;
 
    //메모이제이션
    if (dp[x][y] != -1return dp[x][y];
 
    dp[x][y] = (jump(x + arr[x][y], y) || jump(x, y + arr[x][y]));
 
    return dp[x][y];
}
 
int main() {
 
    cin >> c;
 
    while (c--) {
        cin >> n;
        memset(dp, -1sizeof(dp));
 
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                cin >> arr[i][j];
            }
        int result = jump(00);
        if (result == 1)
            cout << "YES" << '\n';
        else
            cout << "NO" << '\n';
    }
    return 0;
}
cs

 

재귀에대해 조금은.. 알아가는느낌

728x90