728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 구현
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int> > land)
{
int answer = 0;
int n = land.size();
int m = land[0].size();
for (int i = 1; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int maxNum = 0;
for (int k = 0; k < m; k++)
{
// 이전 행과 같은 열이면 안됨
if (k != j)
maxNum = max(maxNum, land[i - 1][k]);
}
// 내려가면서 이전 행의 최댓값을 더한 값으로 갱신
land[i][j] = land[i][j] + maxNum;
}
}
return *max_element(land[n-1].begin(), land[n-1].end());
}
해결 방법
첫 번째 행은 건너뛰고 두 번째 행부터 이전 행에서 현재 행과 같은 열이 아닌 수 중 최댓값을 더하여 갱신하면 결국 끝에는 각 경우의 수의 최댓값이 들어가게 된다.
'개발 > 알고리즘' 카테고리의 다른 글
| [프로그래머스] 실패율(C++) (0) | 2025.10.28 |
|---|---|
| [프로그래머스] 배달(C++) (0) | 2025.10.27 |
| [프로그래머스] 양과 늑대(C++) (0) | 2025.08.21 |
| [프로그래머스] 최적의 행렬 곱셈(C++) (0) | 2025.07.14 |
| [백준] 2473번: 세 용액(C++) (1) | 2025.07.08 |