반응형

https://programmers.co.kr/learn/courses/30/lessons/12913

 

코딩테스트 연습 - 땅따먹기

땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟

programmers.co.kr

 

현재 행은 이전 행의 동일한 열에서는 밟을 수 없습니다.

지금 밟을 수 있는 칸까지 누적된 최대 점수는,

dp[i][j] = max(

dp[i-1][0~3 중에서 j가 아닌 수)]

);

(i는 행 번호(0~n-1), j는 열 번호(0~3))

입니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<vector<int> > land)
{
    int n = land.size();
    for(int i=1; i<n; i++) {
        for(int j=0; j<4; j++) {
            int m = -1;
            for(int k=0; k<4; k++)
                if(j != k) m = max(m, land[i-1][k]);
            land[i][j] += m;
        }
    }
    return max({land[n-1][0], land[n-1][1], land[n-1][2], land[n-1][3]});
}
반응형

+ Recent posts