-
[LeetCode | Python] 120. Triangle개발/알고리즘 2025. 4. 8. 21:38
느낀점
여러 문제를 풀다보면 그래도 어떠한 문제도 익숙하게 접근하게 되는 것 같다. 너무나 편안하게 DP가 생각이 들었고 바로 구현했다.
문제
https://leetcode.com/problems/triangle/
삼각형 모양으로 숫자들이 배열된 리스트가 주어졌을 때, 꼭대기에서 시작해서 맨 아래 바닥까지 이동하면서 거쳐간 숫자들의 합이 최소가 되는 경로를 찾는 문제입니다.
이동 규칙:
현재 행의 인덱스 i에 있다면, 다음 행에서는 동일한 인덱스 i 또는 바로 오른쪽 인덱스 i + 1로만 이동할 수 있습니다.
목표:
꼭대기에서 바닥까지 이동하는 모든 가능한 경로 중에서 숫자들의 합이 가장 작은 경로의 합을 반환해야 합니다.풀이
트라이앵글 문제라고해서 배열이 아닌 것은 아니고, 보통 이런 건 첫번째부터 반복을 돌 필요가 없기 때문에 첫번째 행을 제외하고 두번째 행부터 반복한다. 각 더하기 부분을 전 위치에서 작은 값을 더해 나아가며 마지막 행중에서 가장 작은 값을 반환하면 된다.
from typing import List class Solution: def minimumTotal(self, triangle: List[List[int]]) -> int: for y in range(1, len(triangle)): for x in range(len(triangle[y])): if x == 0: triangle[y][x] += triangle[y-1][x] elif x == len(triangle[y]) - 1: triangle[y][x] += triangle[y-1][x-1] else: triangle[y][x] += min(triangle[y-1][x-1], triangle[y-1][x]) return min(triangle[-1])
결과
- 공간복잡도: $$ O(N^2) $$
- 시간복잡도: $$ O(1) $$
'개발 > 알고리즘' 카테고리의 다른 글
[LeetCode | Python] 162. Find Peak Element (0) 2025.04.22 [LeetCode | Python] 204. Count Primes (0) 2025.04.21 [LeetCode | Python] 93. Restore IP Addresses (0) 2025.04.05 하루히 문제 (Haruhi Problem) (0) 2025.04.05 [LeetCode | Python] 55. Jump Game (0) 2025.03.23