🌞Algorithm/πŸ”₯programmers

[programmers] ν”Όλ‘œλ„ - μœ„ν΄λ¦¬ μ±Œλ¦°μ§€

λΏŒμ•Ό._. 2021. 12. 1. 14:08

μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μœ„ν΄λ¦¬ μ±Œλ¦°μ§€

 


<ν”Όλ‘œλ„>

문제 μ„€λͺ…

 

XXκ²Œμž„μ—λŠ” ν”Όλ‘œλ„ μ‹œμŠ€ν…œ(0 μ΄μƒμ˜ μ •μˆ˜λ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€)이 있으며, 일정 ν”Όλ‘œλ„λ₯Ό μ‚¬μš©ν•΄μ„œ λ˜μ „μ„ νƒν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 각 λ˜μ „λ§ˆλ‹€ νƒν—˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 λ˜μ „ νƒν—˜μ„ λ§ˆμ³€μ„ λ•Œ μ†Œλͺ¨λ˜λŠ” "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ μžˆμŠ΅λ‹ˆλ‹€. "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"λŠ” ν•΄λ‹Ή λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄ 가지고 μžˆμ–΄μ•Ό ν•˜λŠ” μ΅œμ†Œν•œμ˜ ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λ‚΄λ©°, "μ†Œλͺ¨ ν”Όλ‘œλ„"λŠ” λ˜μ „μ„ νƒν—˜ν•œ ν›„ μ†Œλͺ¨λ˜λŠ” ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"κ°€ 80, "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ 20인 λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” μœ μ €μ˜ ν˜„μž¬ 남은 ν”Όλ‘œλ„λŠ” 80 이상 이어야 ν•˜λ©°, λ˜μ „μ„ νƒν—˜ν•œ ν›„μ—λŠ” ν”Όλ‘œλ„ 20이 μ†Œλͺ¨λ©λ‹ˆλ‹€.

이 κ²Œμž„μ—λŠ” ν•˜λ£¨μ— ν•œ λ²ˆμ”© νƒν—˜ν•  수 μžˆλŠ” λ˜μ „μ΄ μ—¬λŸ¬ 개 μžˆλŠ”λ°, ν•œ μœ μ €κ°€ 였늘 이 λ˜μ „λ“€μ„ μ΅œλŒ€ν•œ 많이 νƒν—˜ν•˜λ € ν•©λ‹ˆλ‹€. μœ μ €μ˜ ν˜„μž¬ ν”Όλ‘œλ„ k와 각 λ˜μ „ 별 "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ λ‹΄κΈ΄ 2차원 λ°°μ—΄ dungeons κ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μœ μ €κ°€ νƒν—˜ν•  수 μžˆλŠ” μ΅œλŒ€ λ˜μ „ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μ œν•œ 사항

 

- kλŠ” 1 이상 5,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
- dungeons의 μ„Έλ‘œ(ν–‰) 길이(즉, λ˜μ „μ˜ 개수)λŠ” 1 이상 8 μ΄ν•˜μž…λ‹ˆλ‹€.
  - dungeons의 κ°€λ‘œ(μ—΄) κΈΈμ΄λŠ” 2μž…λ‹ˆλ‹€.
  - dungeons의 각 행은 각 λ˜μ „μ˜ ["μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"]μž…λ‹ˆλ‹€.
  - "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"λŠ” 항상 "μ†Œλͺ¨ ν”Όλ‘œλ„"보닀 ν¬κ±°λ‚˜ κ°™μŠ΅λ‹ˆλ‹€.
  - "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 "μ†Œλͺ¨ ν”Όλ‘œλ„"λŠ” 1 이상 1,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  - μ„œλ‘œ λ‹€λ₯Έ λ˜μ „μ˜ ["μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"]κ°€ μ„œλ‘œ 같을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

문제 풀이

   - my solution

from itertools import permutations # μˆœμ—΄

def solution(k, dungeons):
    answer = -1
    
    arr=list(permutations(dungeons, len(dungeons))) # λͺ¨λ“  경우의 수
    for i in arr:
        start=k # init
        cnt=0 # count
        for j in i:
            if start>=j[0]: # μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„ μΆ©μ‘±
                start-=j[1] # ν”Όλ‘œλ„ μ†Œλͺ¨
                cnt+=1 # νƒν—˜ κ°€λŠ₯
            else:
                break
        if cnt>answer: # νƒν—˜ν•  수 μžˆλŠ” μ΅œλŒ€ λ˜μ „ 수
            answer=cnt
            
    return answer

 

 

1) μˆœμ—΄μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  경우의 수 탐색

2) λͺ¨λ“  경우의 수 탐색

  2-1) μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„λ₯Ό μΆ©μ‘±ν•œ 경우: ν”Όλ‘œλ„ μ†Œλͺ¨ 및 cnt +1

3) νƒν—˜ν•  수 μžˆλŠ” μ΅œλŒ€ λ˜μ „ 수둜 answer κ°’ ꡐ체


μƒκ°πŸ€”

 

μ²˜μŒμ—λŠ” μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„ 순으둜 μ •λ ¬ν•΄μ•Ό ν• κΉŒ, μ•„λ‹ˆλ©΄ μ†Œλͺ¨ ν”Όλ‘œλ„ 순으둜 μ •λ ¬ν•΄μ•Ό ν• κΉŒ

μ–΄λ–€ 순으둜 μ •λ ¬ν•΄μ„œ ν•΄μ•Ό ν• κΉŒλ‘œ κ³ λ―Όν–ˆλ˜ 것 κ°™λ‹€. 

ν•˜μ§€λ§Œ 문제λ₯Ό μ½μ–΄λ³΄λ‹ˆ μ΅œλŒ€ λ˜μ „μ˜ κ°œμˆ˜λŠ” 8κ°œμ΄λ―€λ‘œ μˆœμ—΄μ„ μ‚¬μš©ν•΄λ„ 될 것 κ°™λ‹€λŠ” 생각에

permutationsλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  경우의 수λ₯Ό νƒμƒ‰ν•˜λŠ” λ°©λ²•μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€λ”λ‹ˆ 성곡할 수 μžˆμ—ˆλ‹€.


좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅, https://programmers.co.kr/learn/challenges