๐Ÿ’ป์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œํ’€์ด28

์ง€๋ฏผ์„œยท2023๋…„ 3์›” 16์ผ
0

coding test

๋ชฉ๋ก ๋ณด๊ธฐ
27/30

Chapter12. ๊ตฌํ˜„

[๋ฌธ์ œ63] ์กฐ์ด์Šคํ‹ฑ - Level2

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA

์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ "JAZ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์œ„๋กœ 9๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ J๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ์ด์Šคํ‹ฑ์„ ์™ผ์ชฝ์œผ๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ ์ปค์„œ๋ฅผ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์•„๋ž˜๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ Z๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 11๋ฒˆ ์ด๋™์‹œ์ผœ "JAZ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ์ด๋•Œ๊ฐ€ ์ตœ์†Œ ์ด๋™

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ด๋ฆ„ name์ด ๋งค๊ฐœ๋ณ„์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ด๋ฆ„์— ๋Œ€ํ•ด ์กฐ์ด์Šคํ‹ฑ ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”.

[์ œํ•œ์‚ฌํ•ญ]

  • name์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ.
  • name์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜

[์ฝ”๋“œ์ž‘์„ฑ]

1. ์ดˆ๊ธฐ ํ• ๋‹น ์ง„ํ–‰

def solution(name):
	answer = 0
    size = len(name)
    min_move = size - 1

2. ์กฐ์ด์Šคํ‹ฑ์„ ์กฐ์ž‘ํ•ด ๊ธ€์ž ์ž…๋ ฅ

for idx, char in enumerate(name):
	answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
    
    next_idx = idx + 1
    while next_idx < size and name[next_idx] == 'A': next_idx += 1
    
    min_move = min([min_move, 2*idx + idx + size - next_idx, idx + 2 * (size - next_idx)])

3. ์ขŒ/์šฐ๋กœ ์›€์ง์ธ ํšŸ์ˆ˜์™€ ์ƒ/ํ•˜๋กœ ์›€์ง์ธ ํšŸ์ˆ˜๋ฅผ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜

answer += min_move
return answer

[์ „์ฒด์ฝ”๋“œ]

def solution(name):
	answer = 0
    size = len(name)
    min_move = size - 1
    
    for idx, char in enumerate(name):
		answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
    
        next_idx = idx + 1
        while next_idx < size and name[next_idx] == 'A': next_idx += 1
    
    	min_move = min([min_move, 2*idx + idx + size - next_idx, idx + 2 * (size - next_idx)])
    
    answer += min_move
	return answer
profile
๐Ÿ’ป + ๐ŸŽฅ

0๊ฐœ์˜ ๋Œ“๊ธ€