Post

ν”Όλ‘œλ„ lv2

🌈문제 링크

1
2
3
<풀이방법 2개>
1. λ°±νŠΈλž™ν‚Ή
2. μˆœμ—΄ & μ—°μ‚°

Desktop View

Desktop View

Desktop View

1
2
3
4
k : ν˜„μž¬ ν”Όλ‘œλ„
count : λ˜μ „ 수
dungeon : λ˜μ „ 정보
visitted : λ°©λ¬Έμ—¬λΆ€

1. λ°±νŠΈλž™ν‚Ή

DFS β€”> μ—¬κΈ°μ„œλŠ” ν•œλ²ˆμ— λ˜μ „μ„ 갈 수 μžˆλŠ” λκΉŒμ§€ νƒμƒ‰ν•œ ν›„ 이전 λ‹¨κ³„λ‘œ λŒμ•„κ°€λŠ” μž‘μ—…

info ν•¨μˆ˜λ₯Ό λ¨Όμ € μ •μ˜, λ°‘μ—μ„œ solution ν•¨μˆ˜κ°€ info ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ κ²°κ³Όλ₯Ό λ°˜ν™˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
max_count = 0

def dfs(k, count, dungeons, visited):
    global max_count 
    if count > max_count:
        max_count = count
    
    for i in range(len(dungeons)):
        if visited[i] != 1 and k >= dungeons[i][0]:
            visited[i] = True
            dfs(k - dungeons[i][1], count + 1, dungeons, visited)
            visited[i] = False
        
def solution(k, dungeons):
    global max_count
    visited = [False] * len(dungeons)
    dfs(k, 0, dungeons, visited)
    return max_count

max_count = 0

def dfs(k, count, dungeons, visited): global max_count

λ˜μ „ 돌 수 μžˆλŠ” μ΅œλŒ€ 횟수 κ°’ μ΄ˆκΈ°ν™”λ‘œ 0으둜 μ„€μ •

μ›λž˜ dfs ν•¨μˆ˜ λ°”κΉ₯에 있던 max_countλ₯Ό μ „μ—­λ³€μˆ˜μΈ global둜

global max_count둜 μ–ΈκΈ‰ν•΄μ£Όλ©΄μ„œ μ•ˆμ—μ„œλ„ 적용 κ°€λŠ₯

if count > max_count:

max_count = count

μš°λ¦¬κ°€ μ°ΎλŠ” 것은 μ΅œλŒ€ λ˜μ „ 돌 수 μžˆλŠ” 횟수

if visited[i] != 1 and k >= dungeons[i][0]:

visited[i] = True

λ§Œμ•½ λ˜μ „μ„ λ°©λ¬Έ μ•ˆν–ˆκ³ , ν˜„μž¬ ν”Όλ‘œλ„ >= λ˜μ „μ„ λ›°λ©΄μ„œ μ†Œλͺ¨λ  ν”Όλ‘œλ„ 이 κ²½μš°μ—

ν•΄λ‹Ή λ˜μ „μ„ λ°©λ¬Έν–ˆλ‹€κ³  ν•˜μ—¬ True

dfs(k - dungeons[i][1], count + 1, dungeons, visited) visited[i] = False

  • μž¬κ·€μ μœΌλ‘œ ν•œλ²ˆ ν•¨μˆ˜ 호좜 β€”> dfs(~~)

ν•΄λ‹Ή λ˜μ „μ„ λ°©λ¬Έν•œ μƒνƒœμ—μ„œ 남은체λ ₯κ³Ό λ°©λ¬Έν•œ λ˜μ „μˆ˜λ₯Ό 가지고 μž¬κ·€μ μœΌλ‘œ λ‹€μŒλ˜μ „ 탐색

visited =0 β€”β†’ λ°±νŠΈλž™ν‚Ήμ„ μˆ˜ν–‰ν•΄ ν•΄λ‹Ήλ˜μ „μ„ λ°©λ¬Έν•˜μ§€ μ•Šμ€ μƒνƒœλ‘œ λŒμ•„κ°

def solution(k, dungeons): global max_count

이제 λ˜μ „ μ΅œλŒ€ 돌 수 μžˆλŠ” 횟수 κ΅¬ν•©μ‹œλ‹€!

visited = [False] * len(dungeons)

visited λΌλŠ” 리슀트λ₯Ό λ§Œλ“€λ˜, 리슀트의 각 μš”μ†Œλ₯Ό False ν˜Ήμ€ 0 으둜 μ΄ˆκΈ°ν™”

dfs(k, 0, dungeons, visited) return max_count

0 ν˜Ήμ€ False β€”β†’ μ–΄λ–€ λ˜μ „λ„ λŒμ§€ μ•Šμ€ μƒνƒœμ—μ„œ μ„Έκ² μŠ΅λ‹ˆλ‹€

dfs μ•Œκ³ λ¦¬μ¦˜μ—μ„œ λ˜μ „ λ°©λ¬Έμ—¬λΆ€ μΆ”μ ν•œ ν›„, μ΅œλŒ€ 돌 수 μžˆλŠ” 횟수 λ°˜ν™˜


2. μˆœμ—΄ & μ—°μ‚°

Desktop View

Desktop View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from itertools import permutations
def solution(k, dungeons):
    max_count = 0 
    dungeon_permut = list(permutations(dungeons, len(dungeons))) 
    
    for dungeons_path in dungeon_permut:
        current_hp = k    
        count = 0 
        
        for required_minimum_hp, consume in dungeons_path:
            if required_minimum_hp <= current_hp:
                count += 1
                current_hp -= consume
            elif current_hp < required_minimum_hp:
                break

        if max_count < count:
            max_count = count
    
    return max_count

Desktop View

Desktop View

This post is licensed under CC BY 4.0 by the author.
3D GIF