๐๏ธ Algorithm/โฌ ํ๋ก๊ทธ๋๋จธ์ค
โฌ [Programmers] [Python] [Level2] ํผ๋ก๋
Dbswnstjd
2023. 4. 6. 16:59
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/87946
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
# ํ๋ก๊ทธ๋๋จธ์ค 2๋จ๊ณ - ํผ๋ก๋
from itertools import permutations
from collections import deque
def solution(k, dungeons):
answer = 0
for p in permutations(dungeons, len(dungeons)):
tmp = k
cnt = 0
for need, spend in p:
if tmp >= need:
tmp -= spend
cnt += 1
answer = max(answer, cnt)
return answer
solution(80, [[80,20],[50,40],[30,10]])
#Backtracking
answer = 0
def dfs(k, cnt, dungeons, visited):
global answer
if cnt > answer:
answer = cnt
for i in range(len(dungeons)):
if not visited[i] and k >= dungeons[i][0]:
visited[i] = True
dfs(k - dungeons[i][1], cnt + 1, dungeons, visited)
visited[i] = False
def solution(k, dungeons):
global answer
visited = [False] * len(dungeons)
dfs(k, 0, dungeons, visited)
return answer
# BFS
def solution(k, dungeons):
answer = -1
queue = deque()
queue.append((k, []))
while queue:
k, route = queue.popleft()
for i in range(len(dungeons)):
a, b = dungeons[i]
if k >= a and i not in route:
temp = route + [i]
queue.append((k - b, temp))
else:
answer = max(answer, len(route))
return answer
๋ฐฑํธ๋ํน, BFS, permutation์ ์ด์ฉํ์ฌ ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.