[C++] 땅따먹기 - DP

2026. 10. 3. 18:57·coding test - C++/기본기문제
728x90
반응형

 

땅따먹기

문제 유형

이 문제는 DP(동적 계획법) 문제다.

조건은 같은 열을 연속해서 선택할 수 없다는 것이다.

같은 행을 계속 밟을 수 없음 ❌
같은 열을 연속해서 선택할 수 없음 ✅

DP 상태

dp[i][j]를 다음과 같이 정의한다.

i번째 행에서 j번째 열을 선택했을 때 얻을 수 있는 최대 점수

점화식

현재 j번째 열을 선택하면 이전 행에서는 j가 아닌 열을 선택해야 한다.

dp[i][j] =
    land[i][j] + 이전 행에서 j가 아닌 열의 최댓값

예를 들어 현재 j = 2열을 선택하면 이전 행에서는:

0열, 1열, 3열

중 하나를 선택해야 한다.

초기값

첫 번째 행은 이전 행이 없으므로 그대로 저장한다.

dp[0][j] = land[0][j];

풀이 코드

#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> land) {
    int n = land.size();

    vector<vector<int>> dp(n, vector<int>(4, 0));

    // 첫 번째 행
    for (int j = 0; j < 4; j++) {
        dp[0][j] = land[0][j];
    }

    // 두 번째 행부터 계산
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < 4; j++) {
            int best = 0;

            for (int k = 0; k < 4; k++) {
                if (k != j) {
                    best = max(best, dp[i - 1][k]);
                }
            }

            dp[i][j] = land[i][j] + best;
        }
    }

    // 마지막 행에서 가장 큰 값이 정답
    return *max_element(dp[n - 1].begin(), dp[n - 1].end());
}
728x90
반응형

'coding test - C++ > 기본기문제' 카테고리의 다른 글

[C++] 배달 - 다익스트라로 구현 (각 거리의 최소 비용 구하기 - 우선순위큐)  (0) 2026.10.03
[C++] 스티커문제 - dp  (0) 2026.10.03
[C++] 가장 큰 정사각형 찾기 - DP  (0) 2026.10.03
[C++] 다이나믹 프로그래밍 - AI 개념 정리  (0) 2026.10.01
[C++] 이분탐색  (0) 2026.10.01
'coding test - C++/기본기문제' 카테고리의 다른 글
  • [C++] 배달 - 다익스트라로 구현 (각 거리의 최소 비용 구하기 - 우선순위큐)
  • [C++] 스티커문제 - dp
  • [C++] 가장 큰 정사각형 찾기 - DP
  • [C++] 다이나믹 프로그래밍 - AI 개념 정리
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (657) N
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • BIO (0)
        • Basic (2)
      • coding test - python (305)
        • Programmers (170)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (3)
        • Programmers (14)
        • 백준 (8)
        • 기본기문제 (14)
      • 공부정리 (6) N
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (3)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (1)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (8)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    programmers
    소수
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[C++] 땅따먹기 - DP
상단으로

티스토리툴바