🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λͺ¨μŒμ‚¬μ „ (level2, python)

개발자 HOON 2022. 9. 13. 22:52

문제 μ„€λͺ…

사전에 μ•ŒνŒŒλ²³ λͺ¨μŒ 'A', 'E', 'I', 'O', 'U'λ§Œμ„ μ‚¬μš©ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ”, 길이 5 μ΄ν•˜μ˜ λͺ¨λ“  단어가 μˆ˜λ‘λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μ „μ—μ„œ 첫 번째 λ‹¨μ–΄λŠ” "A"이고, κ·Έλ‹€μŒμ€ "AA"이며, λ§ˆμ§€λ§‰ λ‹¨μ–΄λŠ” "UUUUU"μž…λ‹ˆλ‹€.

 

단어 ν•˜λ‚˜ wordκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 이 단어가 μ‚¬μ „μ—μ„œ λͺ‡ 번째 단어인지 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­
 
  • word의 κΈΈμ΄λŠ” 1 이상 5 μ΄ν•˜μž…λ‹ˆλ‹€.
  • wordλŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμž 'A', 'E', 'I', 'O', 'U'둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예

 

μž…μΆœλ ₯ 예 μ„€λͺ…

 

μž…μΆœλ ₯ 예 #1

μ‚¬μ „μ—μ„œ 첫 번째 λ‹¨μ–΄λŠ” "A"이고, κ·Έλ‹€μŒμ€ "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 κ°™μŠ΅λ‹ˆλ‹€. "AAAAE"λŠ” μ‚¬μ „μ—μ„œ 6번째 λ‹¨μ–΄μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #2

"AAAE"λŠ” "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 λ‹€μŒμΈ 10번째 λ‹¨μ–΄μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #3

"I"λŠ” 1563번째 λ‹¨μ–΄μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #4

"EIO"λŠ” 1189번째 λ‹¨μ–΄μž…λ‹ˆλ‹€.


풀이 μ½”λ“œ

def solution(word):
    letter = 'AEIOU'
    answer = 0
    count = 0
    
    def dfs(now, target):
        nonlocal count
        nonlocal answer
        
        if now == target:
            answer = count
            return

        if len(now) > 5:
            return

        count += 1

        for l in letter:
            dfs(now+l, target)
        
    dfs('', word)
    return answer

DFSλ₯Ό 톡해 ν’€μ—ˆλ‹€.

이 μ½”λ“œμ˜ 단점은, now == target인 것을 μ°Ύμ•„μ„œ 리턴을 ν•˜λ”λΌλ„,

μž¬κ·€μ  ν•¨μˆ˜μ˜ νŠΉμ„±μƒ μž¬κ·€ μŠ€νƒμ— μŒ“μΈ λͺ¨λ“  것듀이 λ¦¬ν„΄λ˜μ§„ μ•ŠλŠ”λ‹€.

λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„ μΈ‘λ©΄μ—μ„œ 손해λ₯Ό λ³΄λŠ” 면이 μžˆλ‹€.

 

itertools λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ λͺ¨λ“  쑰합을 λ§Œλ“€μ–΄μ„œ ν’€μ΄ν•˜κ±°λ‚˜,

심지어 5쀑 for문을 μ‚¬μš©ν•΄ 풀이해도 ν’€λ¦°λ‹€.