๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '๋Œ€์ถฉ ๋งŒ๋“  ์žํŒ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 3. 15.
728x90
๋ฐ˜์‘ํ˜•
 

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

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

programmers.co.kr

"""
ํœด๋Œ€ํฐ์˜ ์žํŒ์€ ์ปดํ“จํ„ฐ ํ‚ค๋ณด๋“œ ์žํŒ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ํ‚ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
ํ‚ค ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ, ๋™์ผํ•œ ํ‚ค๋ฅผ ์—ฐ์†ํ•ด์„œ 
๋น ๋ฅด๊ฒŒ ๋ˆ„๋ฅด๋ฉด ํ• ๋‹น๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ž๊ฐ€ ๋ฐ”๋€๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ฒˆ ํ‚ค์— "A", "B", "C" ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค๋ฉด 1๋ฒˆ ํ‚ค๋ฅผ 
ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "A", ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "B", ์„ธ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "C"๊ฐ€ ๋˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

1๋ฒˆ ํ‚ค๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ• ๋‹น๋œ ๋ฌธ์ž๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฌธ์ž์—ด๋ฐฐ์—ด keymap๊ณผ 
์ž…๋ ฅํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด๋“ค์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด targets๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, 
๊ฐ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ์”ฉ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€ 
์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๋‹จ, ๋ชฉํ‘œ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” -1์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
"""

def solution(keymap, targets):
    answer = []
    for target in targets:
        count, isTrue = 0, True
        for key in target:
            min_index = min([101] + [k.find(key)+1 for k in keymap if k.find(key)+1 != 0])
            if min_index == 101:
                isTrue = False
                break
            count += min_index
        answer.append(count if isTrue else -1)
        
    return answer

"""
keymap์— ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์ด ์žˆ์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ณ  ์—†์œผ๋ฉด ๋„ฃ์ง€ ์•Š์•„์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ตœ์†Œ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’์ธ 101์ด๋ผ๋ฉด keymap์— ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ -1์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๋จผ์ € targets๋ฆฌ์ŠคํŠธ์—์„œ target์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์˜ค๊ณ , 
target์˜ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  count, 
keymap์— ์•ŒํŒŒ๋ฒณ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” isTrue๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  target์—์„œ ์•ŒํŒŒ๋ฒณ ํ•˜๋‚˜์”ฉ keymap์— ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด for๋ฌธ์„ ๋Œ๋ ธ๋‹ค.
์•ŒํŒŒ๋ฒณ์ด ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— minํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ 
๋ฆฌ์ŠคํŠธ ๋‚ดํฌ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ keymap์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์ฃผ์—ˆ๋‹ค.

์šฐ์„  k.find(key)+1์€ findํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ  find๋Š” indexํ•จ์ˆ˜์™€ ๋น„์Šทํ•˜๋‹ค.
findํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์—์„œ key๊ฐ’์„ ์ฐพ์•„ ์ธ๋ฑ์Šค๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๊ณ , 
๋งŒ์•ฝ key๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฆฌํ„ดํ•œ๋‹ค.

๋‚ดํฌ๊ตฌ๋ฌธ์„ ํ•ด์„ํ•˜๋ฉด keymap์—์„œ ํ•˜๋‚˜์”ฉ ๊ฐ’์„ ๊ฐ€์ง€๊ณ ์˜ค๋Š”๋ฐ, k.find(key)+1์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด
๋‹ค์‹œ๋งํ•ด keymap์—์„œ ๋‚ด๊ฐ€ ์ฐพ์„ key๊ฐ€ ํ‚ค๋งต์— ์žˆ๋‹ค๋ฉด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
๋งŒ์•ฝ keymap์˜ ๋ฌธ์ž์—ด ์ „์ฒด์— ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด min๊ฐ’์€ 101์ด ๋œ๋‹ค. (ํ•˜๋‚˜๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์œผ๋‹ˆ๊นŒ)

๊ทธ๋Ÿฌ๋ฉด keymap์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์„์ˆ˜ ์—†์œผ๋ฏ€๋กœ isTrue๋ฅผ false๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
๊ทธ๋ž˜์„œ ์ •๋‹ต๋ฆฌ์ŠคํŠธ์— ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ์ฐพ์„์ˆ˜์žˆ์—ˆ์œผ๋ฉด count๊ฐ’์„ ๋„ฃ๊ณ ,
์•„๋‹ˆ๋ผ๋ฉด -1์„ ๋„ฃ์–ด์„œ ์ฐพ์„์ˆ˜ ์—†๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€