๐Ÿ–ฅ๏ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/Python

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [Python] ๋Œ€์ถฉ ๋งŒ๋“  ์žํŒ

rtw0202 2026. 3. 9. 16:53

1. ๋ฌธ์ œ ์„ค๋ช…

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

์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ฒˆ ํ‚ค์— "A", "B", "C" ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค๋ฉด 1๋ฒˆ ํ‚ค๋ฅผ ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "A", ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "B", ์„ธ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด "C"๊ฐ€ ๋˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

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

์ด ํœด๋Œ€ํฐ ์žํŒ์„ ์ด์šฉํ•ด ํŠน์ • ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ๋•Œ, ํ‚ค๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ๊ทธ ๋ฌธ์ž์—ด์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ keymap์˜ ๊ธธ์ด ≤ 100
    • 1 ≤ keymap์˜ ์›์†Œ์˜ ๊ธธ์ด ≤ 100
    • keymap[i]๋Š” i + 1๋ฒˆ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”๋€Œ๋Š” ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด keymap[0] = "ABACD" ์ธ ๊ฒฝ์šฐ 1๋ฒˆ ํ‚ค๋ฅผ ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด A, ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด B, ์„ธ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด A ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • keymap์˜ ์›์†Œ์˜ ๊ธธ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • keymap์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1 ≤ targets์˜ ๊ธธ์ด ≤ 100
    • 1 ≤ targets์˜ ์›์†Œ์˜ ๊ธธ์ด ≤ 100
    • targets์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ์ถœ๋ ฅ ์˜ˆ์‹œ

 

3. ๋ฌธ์ œ ๋‹ต์•ˆ

def solution(keymap, targets):

    answer = []
    
    for idx, target in enumerate(targets):
        final_cnts = [] # ์ตœ์†Œ๊ฐ’ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ
        is_possible = True  # target ์ƒ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
        
        for c, char in enumerate(target):
            cnts = [] # ํ•œ ๋ฌธ์ž๋‹น ํ‚ค ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜ ๋น„๊ต๋ฅผ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
            cnt = 0 # ํ‚ค ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜
            
            for idx_k, keys in enumerate(keymap):
                for k, key in enumerate(keys):
                    if char == key: # char์ด ํ‚ค๋งต์— ์กด์žฌ
                        cnt = k+1
                        cnts.append(cnt)
                        
            if len(cnts) > 0 : # ํ•˜๋‚˜๋ผ๋„ ํ‚ค๋งต์— ์žˆ๋Š” ๊ฒฝ์šฐ
                final_cnts.append(min(cnts))
            else: # ๋ชจ๋“  ํ‚ค๋งต์— ๋ฌธ์ž์—ด์ด ์—†๋Š” ๊ฒฝ์šฐ(ํ›„๋ณด๊ตฐ X)
                is_possible = False
                break
                          
        if is_possible:
            answer.append(sum(final_cnts))
        else:
            answer.append(-1)
    
    return answer