본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 땅따먹기] c++ (풀이 ,코드 , 개념)

by 말린밴댕이_공부 2023. 5. 22.
반응형

문제 링크 

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

 

프로그래머스

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

programmers.co.kr

문제

 

코드, 풀이

 

문제는 간단하다. 그냥 합을 더하는데 열이 일치하지만 않는것중에 가장 최댓값!! 을 더해주기만 하면 됩니다.

 

#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());

적는 행위 자체를 귀찮아 했는데 이렇게 할수도 있다는 현타가 몰려왔네요..

 

반응형

댓글