๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”ผ๋กœ๋„

by syLim___ 2023. 6. 15.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ๊นŒ Greedy๋กœ๋„ ํ’€ ์ˆ˜ ์—†๊ณ , ๋”ฑํžˆ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ์ •๋ ฌํ•  ์ˆ˜๋„ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ’€๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ,

์ฃผ์–ด์ง„ ๋˜์ „ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์ž‘์€ ๊ฑธ๋กœ ๋ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€๋„ ์•Š์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๋˜์ „ ๋ฆฌ์ŠคํŠธ ์›์†Œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์ˆœ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

๋งค ์š”์†Œ๋งˆ๋‹ค ํƒํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜์ „์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๋ฆฌํ„ดํ•˜์˜€๋‹ค.

 

python

from itertools import permutations

def calc(k, ordered_lst):
    result = 0
    for a, b in ordered_lst:
        if a > k or b > k:
            return result
        k -= b
        result += 1
    return result

def solution(k, dungeons):
    answer = 0
    for order in list(permutations(dungeons)):
        answer = max(answer, calc(k, order))
    return answer

 

๋ถ„๋ช…ํžˆ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„ ๋‹ค๋ฅธ ๋ถ„๋“ค ํ’€์ด๋ฅผ ์ฝ์–ด๋ณด์•˜๋‹ค.

๋‚˜์ฒ˜๋Ÿผ ์ˆœ์—ด์„ ๊ตฌํ•ด์„œ ํ‘ผ ๋ถ„๋“ค๋„ ๊ฝค ๋ณด์˜€์ง€๋งŒ dfsํ’€์ด๊ฐ€ ๋งค์šฐ ๋งŽ์•˜๋‹ค.

 


๋ณด๊ณ  ๋งŽ์ด ๋ฐฐ์šด ์ฝ”๋“œ์ด๋‹ค.

answer = 0
N = 0
visited = []

def dfs(k, cnt, dungeons):
  print(k, cnt, ":")
  global answer
  answer = max(answer, cnt)

  for j in range(N):
    print("j : ",j)
    if k >= dungeons[j][0] and not visited[j]:
      visited[j] = 1
      dfs(k-dungeons[j][1], cnt+1, dungeons)
      visited[j] = 0
      
def solution(k, dungeons):
  global N, visited
  N = len(dungeons)
  visited = [0] * N
  dfs(k, 0, dungeons)
  return answer

 

 

์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

728x90