[ํ๋ก๊ทธ๋๋จธ์ค/python] ํ์๋ฒ(Greedy) : ์กฐ์ด์คํฑ
๋ฌธ์
์กฐ์ด์คํฑ์ผ๋ก ์ํ๋ฒณ ์ด๋ฆ์ ์์ฑํ์ธ์. ๋งจ ์ฒ์์ A๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
ex) ์์ฑํด์ผ ํ๋ ์ด๋ฆ์ด ์ธ ๊ธ์๋ฉด AAA, ๋ค ๊ธ์๋ฉด AAAA
์กฐ์ด์คํฑ์ ๊ฐ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- โฒ - ๋ค์ ์ํ๋ฒณ
- โผ - ์ด์ ์ํ๋ฒณ (A์์ ์๋์ชฝ์ผ๋ก ์ด๋ํ๋ฉด Z๋ก)
- โ - ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋ (์ฒซ ๋ฒ์งธ ์์น์์ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด ๋ง์ง๋ง ๋ฌธ์์ ์ปค์)
- โถ - ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
์๋ฅผ ๋ค์ด ์๋์ ๋ฐฉ๋ฒ์ผ๋ก "JAZ"๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์น์์ ์กฐ์ด์คํฑ์ ์๋ก 9๋ฒ ์กฐ์ํ์ฌ J๋ฅผ ์์ฑํฉ๋๋ค.
- ์กฐ์ด์คํฑ์ ์ผ์ชฝ์ผ๋ก 1๋ฒ ์กฐ์ํ์ฌ ์ปค์๋ฅผ ๋ง์ง๋ง ๋ฌธ์ ์์น๋ก ์ด๋์ํต๋๋ค.
- ๋ง์ง๋ง ์์น์์ ์กฐ์ด์คํฑ์ ์๋๋ก 1๋ฒ ์กฐ์ํ์ฌ Z๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ฐ๋ผ์ 11๋ฒ ์ด๋์์ผ "JAZ"๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด๋๊ฐ ์ต์ ์ด๋์ ๋๋ค.
๋ง๋ค๊ณ ์ ํ๋ ์ด๋ฆ name์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด๋ฆ์ ๋ํด ์กฐ์ด์คํฑ ์กฐ์ ํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ๋ง๋์ธ์.
์ ํ ์ฌํญ
- name์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- name์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ ๋๋ค.
์ ๋ต
def solution(name):
name = list(name)
answer = 0
i = 0
while 1:
left = 1
right = 1
# ์ํ๋ฒณ ๋ฐ๊พธ๊ธฐ
if name[i] != 'A':
answer += min(ord(name[i])-ord('A'),ord('Z')-ord(name[i])+1)
name[i] = 'A'
# ์์น ๋ฐ๊พธ๊ธฐ
if name == ['A']*len(name):
break
else:
for k in range(1, len(name)):
if name[i + k] == "A":
right += 1
else:
break
if name[i - k] == "A":
left += 1
else:
break
if right > left:
answer += left
i -= left
else:
answer += right
i += right
return answer
# ์ํ๋ฒณ ๋ฐ๊พธ๊ธฐ
if name[i] != 'A':
answer += min(ord(name[i])-ord('A'),ord('Z')-ord(name[i])+1)
name[i] = 'A'
๊ฐ ์๋ฆฌ์ ์ํ๋ฒณ์ ๋ง๋ค๊ธฐ ์ํด โฒ๋ฒํผ์ ์ด์ฉํ๋๊ฒ ๋น ๋ฅธ์ง โผ๋ฒํผ์ ์ด์ฉํ๋๊ฒ ๋น ๋ฅธ์ง ํ์ธํ ํ
๋ ์ ์ ์๋ฅผ answer์ ๋ํด์ค ํ ํด๋น ์ํ๋ฒณ์ "A"๋ก ๋ฐ๊พผ๋ค.
if name == ['A']*len(name):
break
else:
for k in range(1, len(name)):
if name[i + k] == "A":
right += 1
else:
break
if name[i - k] == "A":
left += 1
else:
break
name์ ๋ชจ๋ ์ํ๋ฒณ์ด A๊ฐ ๋์๋ค๋ ๋ป์ ๋ชจ๋ ์ํ๋ฒณ์ ๋ค ํ์ธํ๋ค๋ ๋ป์ด๋ฏ๋ก break๋ก ๋น ์ ธ๋์จ๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด ํ์ฌ์๋ ์์น์์ ์ ๋๋ ๋ค์ ์ํ๋ฒณ์ด A๊ฐ ์๋ ๋๊น์ง ์ด๋ํ์ฌ
์์ผ๋ก ์ด๋ํ ๊ฐ์ right์, ๋ค๋ก ์ด๋ํ ๊ฐ์ left์ ์ ์ฅํ๋ค.
if right > left:
answer += left
i -= left
else:
answer += right
i += right
right๋ left๋ ๋น๊ตํ์ฌ ๋ ๊ฐ๊น์ด ์ชฝ์ ์๋ ์ํ๋ฒณ์ผ๋ก ์ด๋ํ๋ค.
answer์๋ ์ ๋๋ ๋ค๋ก ์ด๋ํ ๊ฐ์ธ right ๋๋ left ๊ฐ์ ๋ํด์ฃผ๊ณ
์ํ๋ฒณ์ ์์น๋ฅผ ๊ฐ๋ฆฌํฌ i๋ฅผ ์ด๋ํ๋งํผ ๋ํ๊ฑฐ๋ ๋นผ์ค๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/python] ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS) : ํ๊ฒ ๋๋ฒ (0) | 2021.04.07 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/python] ์์ ํ์ : ์์ ์ฐพ๊ธฐ (0) | 2021.04.02 |
[ํ๋ก๊ทธ๋๋จธ์ค/python] ํด์(hash) : ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2021.03.23 |
[ํ๋ก๊ทธ๋๋จธ์ค/python] ํด์(Hash) : ์์ฃผํ์ง ๋ชปํ ์ ์ (0) | 2021.03.23 |
[ํ๋ก๊ทธ๋๋จธ์ค/python] ํด์(Hash) : ์์ฅ (0) | 2021.03.23 |