일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kubernetes
- 자바
- 데이터베이스
- 우분투
- Ai
- 쿠버네티스
- mysql
- db
- Java
- 인공지능
- 코딩테스트
- Linux
- git
- Python
- 깃
- programmers
- 코테
- docker
- 알고리즘
- 리눅스
- 머신러닝
- LV 0
- github
- Lv 2
- 프로그래머스
- 정처기
- 자료구조
- DevOps
- ubuntu
- 파이썬
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[프로그래머스] Lv.3 정수 삼각형 (Python / Java) 본문
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=python3
문제 설명
위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
제한사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
입출력 예
문제 풀이
- triangle 높이를 n으로 저장
- 높이 n-2 부터 시작하여 0까지 역순으로 반복 (n-1은 바닥이므로 시작점)
- 각 레벨의 모든 요소에 대해, 그 아래 레벨의 바로 아래와 오른쪽 요소 중 큰 값을 현재 요소에 더함
- 모든 레벨의 계산이 끝나면, triangle[0][0] (최대 경로의 합) 반환
[Python]
def solution(triangle):
n = len(triangle)
for i in range(n-2, -1, -1):
for j in range(len(triangle[i])):
triangle[i][j] += max(triangle[i+1][j], triangle[i+1][j+1])
return triangle[0][0]
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
예시를 들어 설명하면, 처음 'n-2'층의 각 숫자는 아래 층의 인접한 두 숫자 중 큰 숫자와 합쳐져서 업데이트가 된다.
- 첫 번째 요소 2는 아래층의 첫 번째 4와 두 번째 5 중에서 큰 값인 5와 합쳐져 7이 된다.
- 두 번째 요소 7은 아래층의 두 번째 5와 세 번째 2 중에서 큰 값인 5와 합쳐져 12가 된다.
- 세 번째 요소 4는 아래층의 세 번째 2와 네 번째 6 중에서 큰 값인 6과 합쳐져 10이 된다.
- 네 번째 요소 4는 아래층의 네 번째 6과 다섯 번째 5 중에서 큰 값인 6과 합쳐져 10이 된다.
7
3 8
8 1 0
7 12 10 10
4 5 2 6 5
이런 식으로 계속 위로 올라가며 업데이트하면, 최종적으로 삼각형의 꼭대기의 값이 최대 경로의 합이 된다.
[Java]
class Solution {
public int solution(int[][] triangle) {
int n = triangle.length;
for (int i = n - 2; i > -1; i--) {
for (int j = 0; j < triangle[i].length; j++) {
triangle[i][j] += Math.max(triangle[i+1][j], triangle[i+1][j+1]);
}
}
return triangle[0][0];
}
}
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.0 정수를 나선형으로 배치하기 (Python) (0) | 2023.08.14 |
---|---|
[프로그래머스] Lv.3 이중우선순위큐 (Python / Java) (0) | 2023.08.13 |
[프로그래머스] Lv.0 겹치는 선분의 길이 (Python) (0) | 2023.07.16 |
[프로그래머스] Lv.0 글자 지우기 (Python / Java) (0) | 2023.07.16 |
[프로그래머스] Lv.3 야근 지수 (Python / Java) (0) | 2023.07.15 |