ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์กฐ์ด์Šคํ‹ฑ

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA ์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. โ–ฒ - ๋‹ค

programmers.co.kr

 

๋ฌธ์ œ ํ’€์ด

 ์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๋•Œ ์กฐ์ด์Šคํ‹ฑ์„ ์›€์ง์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

 

  • โ–ฒ - ๋‹ค์Œ ์•ŒํŒŒ๋ฒณ
  • โ–ผ - ์ด์ „ ์•ŒํŒŒ๋ฒณ
    • (A์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด Z๋กœ)
  • โ—€ - ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
    • (์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ์ปค์„œ)
  • โ–ถ - ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™

 ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์•ŒํŒŒ๋ฒณ์ด A์—์„œ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅธ์ง€, Z์—์„œ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅธ์ง€์— ๋”ฐ๋ผ ์ดˆ๊ธฐ์— ์กฐ์ด์Šคํ‹ฑ์„ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒซ ๋ฌธ์ž๋Š” `A`๋กœ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ `dist`์˜ ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ๋Š” ์กฐ์ด์Šคํ‹ฑ์„ ์›€์ง์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด์™ธ์—๋Š” ํ˜„์žฌ ๋ฌธ์ž์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ ์ค‘ ๋” ๋นจ๋ฆฌ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ฌธ์ œ์—์„œ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

def solution(name):
    dist = [min(ord(s) - ord("A"), ord("Z") - ord(s) + 1) for s in name]

    idx, answer = 0, 0
    while True:
        answer += dist[idx]
        dist[idx] = 0
        
        if sum(dist) == 0:
            break
            
        left, right = 1, 1
        
        while not dist[idx - left]:
            left += 1
            
        while not dist[idx + right]:
            right += 1
            
        if left >= right:
            idx += right
            answer += right
        else:
            idx -= left
            answer += left
    
    return answer

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€