|
์ฝ๋ ์์ฑํ๊ธฐ
(1) ์ฌ๊ท ํจ์ ์ด์ฉํ๊ธฐ
def calculate_max_value(row, col, triangle):
if row == len(triangle)-1:
# depth๊ฐ 1์ด๋ผ๋ ๊ฒ์ ๊ฐ์ฅ ๋ง์ง๋ง ์ซ์๋ค์ ๋ณธ๋ค๋ ๊ฒ
return triangle[row][col]
else:
num1 = calculate_max_value(row+1, col, triangle) + triangle[row][col]
num2 = calculate_max_value(row+1, col+1, triangle) + triangle[row][col]
# print(num1)
# print(num2)
#
# print(max(num1, num2))
return max(num1, num2)
# depth๊ฐ 2 ์ด์์ด๋ฉด col์ด ์๊ธฐ๋ ๊ฐ๊ฑฐ๋ ์๊ธฐ๋ณด๋ค 1 ํฐ ๊ฒฝ์ฐ ์ค์์ ์ต๋๊ฐ
def solution(triangle):
answer = calculate_max_value(0, 0, triangle)
return answer
print(solution([[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]))
Python
๋ณต์ฌ
(2) ๋ฆฌ์คํธ์ ๊ธฐ๋กํ๊ธฐ
import copy
def solution(triangle):
# ์ธต์ ๊ฐ์ = ์ซ์ ๊ฐ์
max_nums = [0]*len(triangle)
print(max_nums)
max_nums[0] = triangle[0][0]
print(max_nums)
for i in range(1,len(triangle)):
# ๊ฐ์ ์
๋ฐ์ดํธํ๋ฉด์ N-1๋ฒ์งธ์ ๊ฐ์ด ์์ค๋ ์ ์์ผ๋ฏ๋ก ๋ณต์ฌํด๋๋ค.
max_nums1 = copy.copy(max_nums)
# ์ผ๊ฐํ์ ์ผ์ชฝ ๋ณ๊ณผ ์ค๋ฅธ์ชฝ ๋ณ
max_nums[0] = max_nums1[0] + triangle[i][0]
max_nums[i] = max_nums1[i-1] + triangle[i][i]
# ๋๋จธ์ง
for j in range(1, i):
max_nums[j] = triangle[i][j] + max(max_nums1[j-1], max_nums1[j])
print(max_nums)
return max(max_nums)
print(solution([[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]))
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
ํฉ์ด ์ต๋์ธ ๊ฒฝ๋ก ๊ตฌํ๊ธฐ โ N์ธต์์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ค๋ฉด (N-1)์ธต๊น์ง์ ์ต๋๊ฐ + N์ธต์ ๊ฐ โ ์ฌ๊ท ํจ์ ๋๋ ๋ฆฌ์คํธ์ ๊ธฐ๋กํ๊ธฐ: DP
1. ์ฌ๊ท ํจ์ ์ด์ฉํ๊ธฐ
์๋์์ ํ ์ธต์ฉ ์ฌ๋ผ๊ฐ๋ฉด์ ์ต๋๊ฐ์ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด์ ๊ตฌํ๋ ๋ฐฉ๋ฒ
์ ์ผ ์๋์ธต์ ๊ทธ๋๋ก returnํ๊ณ ๊ทธ ์์ธต์ ์๋ ์ธต์ ๋ ์ ์ค์์ ํฐ ์๋ฅผ returnํ์ฌ ํฉํ๋ค โ ์ด ๋ ํ๋ ฌ์ ๋ณํํ๋ ๊ฒ์ด ์๋๋ผ ์ต๋ ๊ฐ๋ค์ ๊ฐ์ง๊ณ ์ฌ๋ผ๊ฐ๋ค.
์ ์ผ ์์ธต๊น์ง ์ฌ๋ผ๊ฐ ํ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
2. ๋ฆฌ์คํธ์ ๊ธฐ๋กํ๊ธฐ
์์์ ์๋๋ก ํ ์ธต ์ฉ ๋ด๋ ค์ค๋ฉด์ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
N์ธต์ ๊ฐ๋ค์ ๊ตฌํ๊ธฐ ์ํด์๋ N-1์ธต์์์ ์ต๋๊ฐ๋ค๋ง ์์ผ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํธ์๋ ๊ฐ ์ธต์ ๋ด๋ ค์ค๋ฉด์ ๋ณํํ ๊ฐ๋ค๋ง ๊ธฐ๋กํ๋ค.
์ด ๋ ์ผ๊ฐํ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ณ(7,3,8,2,4์ 7,8,0,4,5)๋ ํ ๊ณณ์์๋ง ๊ฐ์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ฒดํฌํ๋ค.