1. 문제
코딩테스트 연습 - 땅따먹기
땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟��
programmers.co.kr
2. 소스코드
- 이 문제는 그리디로 풀면, 당연히 최적해를 보장하지 않는다.
- 완전 탐색을 하자니, 열은 4개지만, 행의 개수가 10만이다. 완전 탐색도 불가.
- 그래서 DP 구나 싶었다.
- [x][y]까지의 최대값은 [x][y] + [x-1]행에서의 최대값 이다. (단, 열은 달라야한다)
소스코드
#include <iostream>
#include <vector>
using namespace std;
int dp[100001][4];
int solution(vector<vector<int> > land)
{
int answer = 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){
for(int k = 0; k < 4; ++k){
if(j == k) continue;
if(dp[i][j] < land[i][j] + dp[i - 1][k])
dp[i][j] = land[i][j] + dp[i - 1][k];
}
}
}
int len = land.size();
cout << len;
for(int i = 0 ; i < 4; ++i){
if(answer < dp[len - 1][i])
answer = dp[len - 1][i];
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 / DFS ] 타겟 넘버 (0) | 2020.06.30 |
---|---|
[ 프로그래머스 / 투포인트 ] 숫자의 표현 (0) | 2020.06.30 |
[ 프로그래머스 / BFS ] 카카오 프렌즈 컬러링 북 (0) | 2020.06.30 |
[ 프로그래머스 / map ] 전화번호 목록 (0) | 2020.06.30 |
[ 프로그래머스 / sort ] H-Index (0) | 2020.06.29 |