๐ ํ์ด์ฌ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :

์์ ๊ฐ์ ์ผ๊ฐํ์ ๊ผญ๋๊ธฐ์์ ๋ฐ๋ฅ๊น์ง ์ด์ด์ง๋ ๊ฒฝ๋ก ์ค, ๊ฑฐ์ณ๊ฐ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋๋ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ค๋ฅธ์ชฝ ๋๋ ์ผ์ชฝ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด 3์์๋ ๊ทธ ์๋์นธ์ 8 ๋๋ 1๋ก๋ง ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
์ผ๊ฐํ์ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด triangle์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฑฐ์ณ๊ฐ ์ซ์์ ์ต๋๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
๐ ์ ํ ์ฌํญ
- ์ผ๊ฐํ์ ๋์ด๋ 1 ์ด์ 500 ์ดํ์ ๋๋ค.
- ์ผ๊ฐํ์ ์ด๋ฃจ๊ณ ์๋ ์ซ์๋ 0 ์ด์ 9,999 ์ดํ์ ์ ์์ ๋๋ค.
๐ ์ ์ถ๋ ฅ ์

์ถ์ธก)
DP ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์์์ ๋ณด๋ฉด์ ์ด๋ฏธ ํํธ๋ฅผ ๋ด๋ฒ๋ฆผ ใ
์๋ก์ด 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต๋๋ ํจํด์ ๋ฐ๋ผ ๋ํ ๊ฐ์ ๋ฃ์ด ์ต์ข ์ ์ผ๋ก ๋ง์ง๋ง ์ธ๋ฑ์ค ๋ฐฐ์ด์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ ๋ฏ ํ๋ค. ๋ฐ๋ณต๋ ์์ ํจํด ๋ถ๋ถ์ ๋จผ์ ์ค๋ช ํ์๋ฉด ๊ผญ๋๊ธฐ ์ซ์๋ฅผ ๊ทธ๋๋ก ์๋ก์ด ํธ๋ผ์ด์ต๊ธ ๋ฐฐ์ด ๊ฐ์ ์์น์ ์ ์ฅํ๊ณ ๋ค์ ํ์ ์ผ์ชฝ ์ซ์๋ฅผ ๋ํด ์๋ก์ด ํธ๋ผ์ด ์ต๊ธ ๋ฐฐ์ด์์์ ์ผ์ชฝ ์ซ์ ์์น์ ์ ์ฅ, ์ค๋ฅธ์ชฝ ์ซ์๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ ํจํด์ด ๋์๊ฐ๊ฒ ํ๋ฉด ๋ ๋ฏํ๋ค.

๊ฒน์น๋ ๋ถ๋ถ์ ๋ํด์๋ ๋ ํฐ ์ซ์๊ฐ ๋จ๊ฒ ํด์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ์ต๋๊ฐ๋ค๋ง ์ ์ฅ๋๊ฒ ํ์ฌ, ์ด์ ๊ฒฝ์ฐ์ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒ์ ๋จผ์ ๋ฐฐ์ ํ๊ณ ๊ฐ์ฅ ๋์ ์ซ์๊ฐ ๋ ์ ์๋ ๊ฒฐ๊ณผ๋ง์ ๊ฐ์ง๊ณ ํจํด์ ๋ฐ๋ณตํ๋ ๋ฐฉ์์ผ๋ก ์งํ.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ฐ๋ณต๋๋ ์์ ์ค์ด๊ณ , ๊ฒฝ์ฐ์ ์๋ฅผ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
์์ค์ฝ๋)
* 1์ฐจ) ์คํจ : ์ฅ๋ ฌํ ์ฌ ๋ฐํ์ ์๋ฌ
def solution(triangle):
new_Triangle = [[0], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0]]
for idx in range(0, len(triangle)-1) :
if idx == 0 :
# ์์๊ฐ์ ๋ฐ๋ก ๋ฃ์ด์ฃผ๊ธฐ
new_Triangle[0] = triangle[0]
for idx2, value2 in enumerate(triangle[idx]):
#์ค๊ฐ์ซ์
first_Int = new_Triangle[idx][idx2]
#์ผ์ชฝ
plus_Int1 = triangle[idx+1][idx2]
sum1 = first_Int + plus_Int1
if new_Triangle[idx+1][idx2] < sum1 :
new_Triangle[idx+1][idx2] = sum1
#์ค๋ฅธ์ชฝ
plus_Int2 = triangle[idx+1][idx2+1]
sum2 = first_Int + plus_Int2
if new_Triangle[idx+1][idx2+1] < sum2 :
new_Triangle[idx + 1][idx2 + 1] = sum2
# ๋ง์ง๋ง ๊ฒฐ๊ณผ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ ๋ฆฌํด
return max(new_Triangle[len(new_Triangle)-1])
* 2์ฐจ) ๋ฐ๋ณด๋ค. ๋ค์ํ ๋์ด์ ๋ฐฐ์ด์ด ๋ค์ด์ฌ๊ฑด๋ฐ ์์๋ง ์๊ฐํ๊ณ ๋ฐฐ์ด์ ํ๋์ฝ๋ฉ
def solution(triangle):
# ๋ํด์ค ๊ฐ ๋ฃ์ด์ค ๋ค์ฐจ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
new_Triangle = []
for idx in range(0, len(triangle)) :
list = []
for idx2 in range(0, len(triangle[idx])) :
list.append(0)
new_Triangle.append(list)
# ์ผ๊ฐ์์ ์ผ์ชฝ๊ฐ ์ค๋ฅธ์ชฝ ๊ฐ ๋ํด์ ๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ธฐ
for idx in range(0, len(triangle)-1) :
if idx == 0 :
# ์์๊ฐ์ ๋ฐ๋ก ๋ฃ์ด์ฃผ๊ธฐ
new_Triangle[0] = triangle[0]
for idx2, value2 in enumerate(triangle[idx]):
#์ค๊ฐ์ซ์
first_Int = new_Triangle[idx][idx2]
#์ผ์ชฝ
plus_Int1 = triangle[idx+1][idx2]
sum1 = first_Int + plus_Int1
if new_Triangle[idx+1][idx2] < sum1 :
new_Triangle[idx+1][idx2] = sum1
#์ค๋ฅธ์ชฝ
plus_Int2 = triangle[idx+1][idx2+1]
sum2 = first_Int + plus_Int2
if new_Triangle[idx+1][idx2+1] < sum2 :
new_Triangle[idx + 1][idx2 + 1] = sum2
# ๋ง์ง๋ง ๊ฒฐ๊ณผ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ ๋ฆฌํด
return max(new_Triangle[len(new_Triangle)-1])
๋ฆฌ๋ทฐ)
๋จผ์ ํํธ๋ฅผ ๋ด๋ฒ๋ ธ์ง๋ง ์ญ์ ์ง์ ๊ตฌํํ๋ ๊ฒ์ ๋ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ธ ๋ฏ ํ๋ค. ๋ญ๊ฐ ๊ตฌํํ๊ณ ๋ณด๋๊น ์ด๊ฒ ์ต์ ์ด ์๋๊ฑฐ ๊ฐ๊ธฐ๋ ใ ใ ใ DP์ ๊ด๋ จํด์๋ ์ ๋ง ๋ค์ํ ๋ฐฉ๋ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด์ ์ฌ๊ณ ๋ฅผ ๋ง์ถฐ๋๊ฐ๋ ๊ฒ ์ค์ํ๋ค๊ณ ํ๋ค. ๋ฌธ์ ๋ฅผ ์ ๋ง ๋ค์ํ๊ฒ ํ์ด๋ด์ผํ ๋ฏ ํ๋ค.
์ฐธ๊ณ ์์:
'Coding Test > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Programmers] ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ (0) | 2023.01.31 |
|---|---|
| Programmers] ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ ๋ฌธ์ (2) | 2023.01.31 |
| Programmers] ๋ ๋งต๊ฒ (0) | 2023.01.17 |
| Programmers] ๊ฐ์ฅ ํฐ ์ (0) | 2023.01.16 |
| Programmers] ์ ๊ท ์์ด๋ ์ถ์ฒ (0) | 2022.11.23 |
