본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 땅따먹기 / C++

by msm1029 2021. 11. 21.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12913

 

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

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

programmers.co.kr

 

문제 풀이

DP를 적용하여 풀면 된다. 주의할 점은 바로 직전의 열이 겹치면 안된다는 것이며 한 행은 항상 4열이다.

따라서, 점화식을 세울 때 해당 행에서 가장 큰 수를 더하되 열이 겹치면 continue해준다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

int solution(vector<vector<int> > land)
{
    int answer = 0;
    int n = land.size();
    int DP[100001][4] = { 0, };
    
    for(int i=0; i<4; i++){
        DP[0][i] = land[0][i];
    }
        
    for(int i=1; i<land.size(); i++){
        for(int j=0; j<4; j++){
            int maxVal = -1;
            for(int k=0; k<4; k++){
                if(j==k) continue;
                
                maxVal = max(maxVal, DP[i-1][k]);
            }
            DP[i][j] = land[i][j] + maxVal;
        }
    }
    
    for(int i=0; i<4; i++){
        answer = max(answer, DP[n-1][i]);
    }
    
    return answer;
}
반응형