출처 프로그래머스
문제
너무 복잡하게 생각해서 오래 걸렸던 문제이다
생각보다 코드는 간단하게 나왔다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
#include <vector>
#define NUM_COLUMN 4
using namespace std;
int find_max(vector<int> v, int except) {
int max = 0;
for (int idx = 0; idx < v.size(); idx++) {
if (max < v[idx] && idx != except)
max = v[idx];
}
return max;
}
int solution(vector<vector<int> > land)
{
int answer = 0;
vector<vector<int>>::iterator viter = land.begin(), next;
for (next = viter + 1; next != land.end(); next++) {
for (int idx = 0; idx < NUM_COLUMN; idx++) {
(*next)[idx] += find_max((*viter), idx);
}
viter = next;
}
return find_max((*viter), -1);
}
|
풀이를 하자면
각 행마다 최댓값을 찾는 것이 아니라
같은 인덱스를 제외하고 가능한 최댓값들을 계속 찾아서 계속 더해준다.
마지막 누적 최댓값 중 가장 큰 수를 찾으면 정답이다.
샘플 테스트인 [[1,2,3,5], [5,6,7,8], [4,3,2,1]]로 보자면
1 2 3 5 - viter
5 6 7 8 - next
--------------
누적 10 11 12 11
10 11 12 11 -viter
4 3 2 1 -next
-----------------
누적 16 15 13 13
모든 행을 위와 같이 처리한 후
누적된 최댓값들 중 가장 큰수는 16이므로
정답은 16이다.
'About > Algorithm' 카테고리의 다른 글
[프로그래머스][C++] 카카오 프렌즈 컬러링 북 (0) | 2020.03.28 |
---|---|
[프로그래머스][C++] 스킬트리 (0) | 2020.03.28 |
[프로그래머스][C++] 가운데 글자 가져오기 (0) | 2020.03.26 |
[프로그래머스][C++] 124 나라의 숫자 (0) | 2020.03.26 |
[프로그래머스][C++, Python]소수 찾기 문제 ( 에라토스테네스의 체 ) (0) | 2020.03.26 |