프로그래머스 Lv.2 코딩테스트

[프로그래머스 Lv.2] 땅따먹기

하다블 2022. 9. 22. 18:29
반응형

문제는 다음과 같습니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 코드는 다음과 같습니다.

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

int solution(vector<vector<int> > land)
{
    int answer = 0;
    for(int i{0};i<land.size()-1;i++)
    {
        land[i+1][0]+=max(land[i][1],max(land[i][2],land[i][3]));
        land[i+1][1]+=max(land[i][0],max(land[i][2],land[i][3]));
        land[i+1][2]+=max(land[i][0],max(land[i][1],land[i][3]));
        land[i+1][3]+=max(land[i][0],max(land[i][1],land[i][2]));
    }
    answer=max(land[land.size()-1][0],max(land[land.size()-1][1],max(land[land.size()-1][2],land[land.size()-1][3])));
    return answer;
}

이 문제의 특징은 행렬에서 이전의 행이 다음 행에 영향을 계속해서 미친다는 점입니다.

문제 설명에서는 모든 수가 한 자릿수여서 쉽게 결정할 수 있지만 같은 행에서 수의 차이가 크게 난다면 예상한 결과와는 다른 결과가 나올 수 있기 때문에 동적 프로그래밍 방법을 사용해야 합니다.

계속해서 누적으로 같은 열에 있지 않는 원소를 더해감으로써 그중 가장 큰 점수를 정답으로 가지는 방식을 선택했습니다.

반응형