N

(프로그래머스 c++)땅따먹기 본문

프로그래머스 알고리즘/2단계

(프로그래머스 c++)땅따먹기

naeunchan 2020. 5. 22. 11:02
728x90
반응형

DP를 이용하여 문제를 풀었다..!

 

우선 열의 개수는 무조건 4개이다. 시간은 충분할 것 같다..!

3중 for문을 이용하도록 하자.

 

i = 1부터 시작하여, i - 1 행의 수를 모두 비교해야 한다.

단, j != k여야 같은 열 번호의 수를 선택하지 않는다.

m은 현재 행의 위치에서 이전 행의 각 열을 더했을 때 가장 큰 값을 저장하는 변수이다.

그리고 이전의 최댓값이 누적이 되므로 마지막 행에서 최댓값만 찾으면 된다..!

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

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