발자취
[프로그래머스 Lv.3 / C++] Day86. 정수 삼각형 본문
2024. 08. 28 - 코딩테스트 스터디 Day86
01. 문제 설명

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
02. 제한사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
03. 입출력 예
| triangle | result |
| [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] | 30 |
4. 풀이 및 답
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> triangle) {
for (int i = triangle.size() - 2; i >= 0; --i) {
for (int j = 0; j < i + 1; ++j) {
triangle[i][j] += max(triangle[i + 1][j], triangle[i + 1][j + 1]);
}
}
return triangle[0][0];
}bottom-up 방식으로 풀이했다.
가장 아래의 노드부터 시작하여 대각선 왼쪽과 오른쪽의 각 합을 비교한 뒤 더 큰 값을 현재 노드에 저장해 올라간다.
그렇게 되면 가장 마지막에 도달하게 되는 triangle[0][0]이 가장 큰 값을 가지게 되므로 이 값을 출력한다.

정답!

참고한 게시글
[C++][프로그래머스] 정수 삼각형
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📄 문제
bonnate.tistory.com
'코딩테스트 > Daily Coding (C, C++)' 카테고리의 다른 글
| [백준 / C++] Day88. 퇴사 2 (0) | 2024.08.30 |
|---|---|
| [프로그래머스 Lv.3 / C++] Day87. 등굣길 (0) | 2024.08.29 |
| [프로그래머스 Lv.3 / C++] Day85. N으로 표현 (0) | 2024.08.27 |
| [프로그래머스 Lv.3 / C++] Day84. 퍼즐 조각 채우기 (0) | 2024.08.26 |
| [프로그래머스 Lv.3 / C++] Day83. 여행경로 (0) | 2024.08.25 |