๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/87946
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
ํผ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ ํํํ๊ณ , ์ต๋ํ ๋ง์ ๋์ ์ ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ .
- k: ํ์ฌ ํผ๋ก๋
- dungeons: ๋์ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด ([[์ต์ ํ์ ํผ๋ก๋, ์๋ชจ ํผ๋ก๋], ...])
ํด๋น ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน(Backtracking)์ ์ฌ์ฉํ์ฌ ํ ์ ์๋ค.
๋ฐฑํธ๋ํน(Backtracking)
- ํด๋ฅผ ์ฐพ๋ ๋์ค ํด๊ฐ ์๋์ด์ ๋งํ๋ฉด, ๋๋์๊ฐ์ ๋ค์ ํด๋ฅผ ์ฐพ๋ ๊ธฐ๋ฒ
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ฉด์, ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํด๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ถํ์ํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ค์ด๋ฉด์ ์ต์ ์ ํด๋ฅผ ์ฐพ์ ์ ์์
์ฌ์ค ๋๋ ๋ฐฑํธ๋ํน์ ๋ํ ์ดํด๋๊ฐ ๋ถ์กฑํด์ ์ฐพ์๊ฐ๋ฉฐ ํ์๋ค...
def solution(k: int, dungeons: list) -> int:
n = len(dungeons)
ret = 0
def backtrack(k, visited, count):
nonlocal ret
ret = max(ret, count)
for i in range(n):
if not visited[i] and k >= dungeons[i][0]:
visited[i] = True
backtrack(k-dungeons[i][1], visited, count+1)
visited[i] = False
visited = [False] * n
backtrack(k, visited, 0)
return ret
- ๋์ ํํ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๊ธฐ ์ํด ๋ฐฑํธ๋ํน ์ฌ์ฉ
- ํ์ฌ ์ํ์์ ํํ ๊ฐ๋ฅํ ๋์ ์ ์ ํํ๊ณ , ๋์ ํํ ํ ๋ค์ ๋์ ํ์
- ํํํ ์ ์๋ ๋์ ์ด ์์ผ๋ฉด ์ด์ ์ํ๋ก ๋์๊ฐ์(๋ฐฑํธ๋ํน) ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ ํ์
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ฉด์ ์ต๋ ๋์ ํํ ์๋ฅผ ๊ฐฑ์
- ์ต์ข ์ ์ผ๋ก ์ต๋ ๋์ ํํ ์๋ฅผ ๋ฐํ
๋ง์ฝ ๋์ 1(์ฑ๊ณต) -> ๋์ 2(์ฑ๊ณต) -> ๋์ 3(์คํจ) ๊ฐ ๋๋ค๋ฉด,
ํด๋น ๋ฐฑํธ๋ํน์์ ๋น ์ ธ๋์ ๋์ 2๋ฅผ False๋ก ๋ค์ ๋ณ๊ฒฝํ๋ค.
๊ทธ๋ฆฌ๊ณ i๋ 2๋ถํฐ ๋ค์ ์ํ, ๋์ 3์ ์ฒดํฌํ๋ค.
๋์ 1(์ฑ๊ณต), ๋์ 3(์ฑ๊ณต) ์ธ ์ํ์์ ๋ค์ ๋ฐฑํธ๋ํน์ผ๋ก ๋์ 1๋ถํฐ ์ฒดํฌํ๋ค.