개발/π™‹π™§π™€π™œπ™§π™–π™’π™’π™šπ™§π™¨

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 'λŒ€μΆ© λ§Œλ“  자판' 파이썬 풀이

beomcoder 2023. 2. 24. 23:52
728x90
λ°˜μ‘ν˜•
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

"""
νœ΄λŒ€ν°μ˜ μžνŒμ€ 컴퓨터 ν‚€λ³΄λ“œ μžνŒκ³ΌλŠ” λ‹€λ₯΄κ²Œ
ν•˜λ‚˜μ˜ 킀에 μ—¬λŸ¬ 개의 λ¬Έμžκ°€ 할당될 수 μžˆμŠ΅λ‹ˆλ‹€.

ν‚€ ν•˜λ‚˜μ— μ—¬λŸ¬ λ¬Έμžκ°€ ν• λ‹Ήλœ 경우, λ™μΌν•œ ν‚€λ₯Ό μ—°μ†ν•΄μ„œ λΉ λ₯΄κ²Œ λˆ„λ₯΄λ©΄
ν• λ‹Ήλœ μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ λ°”λ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 1번 킀에 "A", "B", "C" μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ ν• λ‹Ήλ˜μ–΄ μžˆλ‹€λ©΄
1번 ν‚€λ₯Ό ν•œ 번 λˆ„λ₯΄λ©΄ "A", 두 번 λˆ„λ₯΄λ©΄ "B", μ„Έ 번 λˆ„λ₯΄λ©΄ "C"κ°€ λ˜λŠ” μ‹μž…λ‹ˆλ‹€.
(μ€‘λž΅)
"""

def solution(keymap, targets):
    answer = []
    kv = {}
    for keys in keymap:
        for index, key in enumerate(keys):
            if key in kv.keys():
                kv[key] = min(index+1, kv[key])
            else:
                kv[key] = index+1
                
    for target in targets:
        try:
            answer.append(sum([kv[key] for key in target]))
        except:
            answer.append(-1)
            
    return answer
    
"""
- 15 line
각 μ•ŒνŒŒλ²³μ„ μ΅œμ†Œλ‘œ λˆ„λ₯Έ 횟수λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ 
kv (key, value)라고 dictλ₯Ό λ§Œλ“€μ—ˆλ‹€. 

- 16 line
dict에 λ„£κΈ° μœ„ν•΄ keymapμ—μ„œ λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ”© κ°€μ§€κ³  μ˜¨λ‹€.

- 17 line
λ¬Έμžμ—΄μ—μ„œ ν•˜λ‚˜μ”© 문자λ₯Ό κ°€μ§€κ³  μ˜€λŠ”λ°, 
index+1번만큼 λˆŒλŸ¬μ•Ό ν•˜κΈ°λ•Œλ¬Έμ— enumerate둜 λ¬Έμžμœ„μΉ˜λ„ μ²΄ν¬ν•œλ‹€.

- 18~21 line
λ§Œμ•½ kv에 문자(key)의 κ°’(index+1)이 λ“€μ–΄κ°€ μžˆλ‹€λ©΄
기쑴의 λ“€μ–΄μžˆλŠ” κ°’κ³Ό μ§€κΈˆ 값을 λΉ„κ΅ν•˜μ—¬ 더 μž‘μ€κ°’μ„ λ‹€μ‹œ 문자의 κ°’μœΌλ‘œ μ§€μ •ν•œλ‹€.
λ“€μ–΄κ°€μžˆμ§€ μ•Šλ‹€λ©΄ ν˜„μž¬ 값을 μž…λ ₯ν•œλ‹€.

- 23~ line
이제 targets의 λ¬Έμžμ—΄μ„ κ°€μ§€κ³  μ˜€λ©΄μ„œ answer에 값을 μΆ”κ°€μ‹œμΌœμ€€λ‹€.
λ¨Όμ € targetλ¬Έμžμ—΄μ—μ„œ 문자 ν•˜λ‚˜μ”©μ„ μ½μ–΄μ™€μ„œ kvμ—μ„œ λ¬Έμžμ— ν•΄λ‹Ήν•˜λŠ” 값을 μΆ”κ°€μ‹œν‚¨λ‹€.

예λ₯Ό λ“€μ–΄μ„œ kv = {'A': 1, 'B': 2} 이고 targetλ¬Έμžμ—΄μ΄ 'AB'이라면
[kv[key] for key in target]은 [1, 2]κ°€ λœλ‹€. 이값을 sumν•˜λ©΄ AB의 μž…λ ₯값이 λœλ‹€.

근데 λ§Œμ•½μ— kv에 값이 μž…λ ₯λ˜μ–΄μžˆμ§€ μ•ŠλŠ” 문자라면 try, exceptλ¬Έμ—μ„œ κ±ΈλŸ¬μ§€κ²Œ λœλ‹€.
그럼 -1을 μž…λ ₯ν•œλ‹€.

μ—¬λ‹΄μœΌλ‘œ μ œν•œμ‚¬ν•­μ΄ λ„ˆλ¬΄ μ΄μƒν•œ 것 κ°™λ‹€.
κ·Έλž˜μ„œ 질문으둜 λ‚¨κ²¨λ‘μ—ˆλŠ”λ° 닡변이 μ™”μœΌλ©΄ μ’‹κ² λ‹€.
https://school.programmers.co.kr/questions/44822
"""
728x90
λ°˜μ‘ν˜•