새소식

코딩테스트/프로그래머스

[C++] 땅따먹기

  • -

[문제]

코딩테스트 연습 - 땅따먹기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

dp 테이블을 만들어서 0번째는 1,2,3 중에서 제일 큰걸, 1번째는 0,2,3중에서 제일 큰걸 .... 이렇게 3번까지 반복하면서 계속해서 1번 행부터 n -1 번(n번은 index가 밖이니까) 까지 내려가자.

[회고]

특별히 어려운 점은 없었다. 다만, 오랜만에 switch문을 써서 풀었다. 예전에 정처기에서 switch문 case들 마다 밑에 break 있어야 한다는걸 까먹어서 틀렸던 기억이 나는데 switch 문에서 밑에 break를 두는걸 잊지 말자.

[코드]

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int dp[100001][5];

int solution(vector<vector<int> > land)
{
    int answer = 0;
    int max_temp = 0;
    
    for(int i = 0;i<land.size();i++){
        for(int j = 0;j<4;j++){
            dp[i][j] = land[i][j];
        }
    }
    
    if(land.size() == 1){
        max_temp = 0;
        max_temp = max(land[0][1],land[0][2]);
        max_temp = max(max_temp,land[0][3]);
        answer = max_temp;
        return answer;
    }
    
    for(int i = 0;i<land.size();i++){
        for(int j = 0;j<4;j++){
            switch(j) {
                case 0:
                    max_temp = 0;
                    max_temp = max(dp[i - 1][1],dp[i - 1][2]);
                    max_temp = max(max_temp,dp[i - 1][3]);
                    dp[i][0] += max_temp;
                    break;
                case 1:
                    max_temp = 0;
                    max_temp = max(dp[i - 1][0],dp[i - 1][2]);
                    max_temp = max(max_temp,dp[i - 1][3]);
                    dp[i][1] += max_temp;
                    break;
                case 2:
                    max_temp = 0;
                    max_temp = max(dp[i - 1][1],dp[i - 1][0]);
                    max_temp = max(max_temp,dp[i - 1][3]);
                    dp[i][2] += max_temp;
                    break;
                case 3:
                    max_temp = 0;
                    max_temp = max(dp[i - 1][1],dp[i - 1][2]);
                    max_temp = max(max_temp,dp[i - 1][0]);
                    dp[i][3] += max_temp;
                    break;            
            }
        }
    }
    
    max_temp = 0;
    max_temp = max(dp[land.size() - 1][1],dp[land.size() - 1][2]);
    max_temp = max(max_temp,dp[land.size() - 1][3]);
    max_temp = max(max_temp,dp[land.size() - 1][0]);
    answer = max_temp;
    
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] 두 원 사이의 정수 쌍  (0) 2023.04.14
[C++] 스킬트리  (0) 2023.04.13
[C++] 튜플  (0) 2023.04.06
[C++] 미로 탈출  (0) 2023.04.05
[C++] 과제 진행하기  (0) 2023.04.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.