반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12913
문제
코드, 풀이
문제는 간단하다. 그냥 합을 더하는데 열이 일치하지만 않는것중에 가장 최댓값!! 을 더해주기만 하면 됩니다.
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> land)
{
int answer = 0;
int arr[4] ={0,};
if(land.size() == 1){
return *max_element(land[0].begin(),land[0].end());
}
for(int i = 1; i < land.size();i++){
for(int j = 0; j < 4; j++){
int score_max = 0; //가장 높은 스코어를 올릴 수 있는 상황
for(int k = 0; k < 4;k++){
if(k != j){
if(score_max < land[i-1][k])
score_max = land[i-1][k];
}
}
land[i][j] += score_max;
}
}
for(int i = 0; i < 4; i++){
if(answer < land[land.size() - 1][i])
answer = land[land.size() - 1][i];
}
return answer;
}
이렇게 만약에 크기가 1일 경우에 대해서도 처리를 해주고 반복문을 돌게 되면서 최댓값을 더해주는 형식으로 진행하였습니다.
여기서 특이한거는 제가 위에서 말한거를 가장 손쉽게 풀이하신분의 코드를 너무 감명받았습니다.
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][1], max(land[i][0], land[i][3]));
land[i + 1][3] += max(land[i][1], max(land[i][2], land[i][0]));
}
return *max_element(land[land.size() - 1].begin(), land[land.size() - 1].end());
적는 행위 자체를 귀찮아 했는데 이렇게 할수도 있다는 현타가 몰려왔네요..
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스 방문 길이] c++ (풀이, 코드) (0) | 2023.05.24 |
---|---|
[프로그래머스 정수삼각형] c++ (풀이, 코드, level3) (1) | 2023.05.22 |
[프로그래머스 주식가격] c++ (코드, 풀이) (0) | 2023.05.21 |
[프로그래머스 오픈채팅방] c++ (풀이, 코드, 개념) (0) | 2023.05.21 |
[프로그래머스 주차 요금 계산] c++ (풀이, 코드) (0) | 2023.05.21 |
댓글