Problem Solving/BOJ

[백준 6245번] [동적 계획법] Cow Solitaire

  • -
728x90
반응형

Approach

움직일 수 있는 방향이 고정되어 있는 상황이므로 관계식을 쓸 수 있다는 점만 캐치했다면 동적 계획법 풀이를 바로 떠올릴 수 있다.

dp[i][j] : max(dp[i + 1][j], dp[i][j - 1]) + value[i][j]

(이때, index가 grid 범위를 넘는 경우에는 0)

Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

using namespace std;

int value[7][7];
int dp[7][7];
int n;

int dp_value(int x, int y){
    if(x < 0 || y < 0 || x >= n || y >= n) return 0;
    else return dp[x][y];
}

int main(void){
    fastio;
    cin >> n;
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            string a;
            cin >> a;
            if(a[0] == 'A'){
                value[i][j] = 1;
            }
            else if(a[0] == 'T'){
                value[i][j] = 10;
            }
            else if(a[0] == 'J'){
                value[i][j] = 11;
            }
            else if(a[0] == 'Q'){
                value[i][j] = 12;
            }
            else if(a[0] == 'K'){
                value[i][j] = 13;
            }
            else{
                value[i][j] = a[0] - '0';
            }
        }
    }

    for(int i = n - 1; i >= 0; i--){
        for(int j = 0; j < n; j++){
            dp[i][j] = max(dp_value(i + 1, j), dp_value(i, j - 1)) + value[i][j];
        }
    }

    cout << dp[0][n - 1] << "\n";
    return 0;
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.