728x90
๋ฐ์ํ
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/17682
ํ์ด
1. ์ด๊ธฐํ
answer = []
i = 0
length = len(dartResult)
- answer: ๊ฐ ๋ผ์ด๋์์ ๊ณ์ฐ๋ ์ ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ์ ๋๋ค. ์ด 3๋ฒ์ ๋ผ์ด๋๊ฐ ์๊ธฐ ๋๋ฌธ์, ๊ฐ ์ ์๋ฅผ ๋ฆฌ์คํธ์ ์ฐจ๋ก๋๋ก ์ถ๊ฐํฉ๋๋ค.
- i = 0: ๋ฌธ์์ด์ ํ์ํ๋ ์ธ๋ฑ์ค ๋ณ์๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ํ์ํ ๋, ๋ช ๋ฒ์งธ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋์ง ์ถ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
- length = len(dartResult): ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋งค๋ฒ len(dartResult)๋ฅผ ํธ์ถํ์ง ์์๋ ๋์ด, ์ฑ๋ฅ ์ธก๋ฉด์์ ์ด์ ์ด ์์ต๋๋ค. length๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋์ง ์๋๋ก ํ๊ธฐ ์ํ ์กฐ๊ฑด์์ ์ฌ์ฉ๋ฉ๋๋ค.
2. ์ซ์ ์ฒ๋ฆฌ
if dartResult[i] == '1' and i + 1 < length and dartResult[i + 1] == '0':
score = 10
i += 2
else:
score = int(dartResult[i])
i += 1
- 10 ์ฒ๋ฆฌ: ๋คํธ ์ ์๋ 0์์ 10 ์ฌ์ด์ ์ซ์์ผ ์ ์์ต๋๋ค. 10์ ์ฒ๋ฆฌํ๊ธฐ ์ํด dartResult[i] == '1'์ผ ๋, ๋ฐ๋ก ๋ค์ ๋ฌธ์๊ฐ '0'์ธ์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ๋ง๋ค๋ฉด, ์ ์๊ฐ 10์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก i๋ฅผ 2๋งํผ ์ฆ๊ฐ์์ผ์ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค.
- ๋จ์ผ ์ซ์ ์ฒ๋ฆฌ: ๊ทธ๋ ์ง ์๋ค๋ฉด, ํ ์๋ฆฌ ์ซ์(0๋ถํฐ 9)๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ํด๋น ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํ(int(dartResult[i]))ํ์ฌ score์ ์ ์ฅํ๊ณ , i๋ฅผ 1๋งํผ ์ฆ๊ฐ์์ผ ๋ค์ ๋ฌธ์๋ก ์ด๋ํฉ๋๋ค.
3. ๋ณด๋์ค ์ฒ๋ฆฌ
if dartResult[i] == 'S':
score = score ** 1
elif dartResult[i] == 'D':
score = score ** 2
elif dartResult[i] == 'T':
score = score ** 3
i += 1
- ๋ณด๋์ค ์ฒ๋ฆฌ: ์ซ์ ๋ฐ๋ก ๋ค์๋ S, D, T ์ค ํ๋๊ฐ ์ต๋๋ค. ์ด๋ ๊ฐ๊ฐ ์ ์์ 1์ ๊ณฑ, 2์ ๊ณฑ, 3์ ๊ณฑ์ ์๋ฏธํฉ๋๋ค.
- S: 1์ ๊ณฑ
- D: 2์ ๊ณฑ
- T: 3์ ๊ณฑ
- ๋ณด๋์ค ๋ฌธ์๊ฐ ์ฒ๋ฆฌ๋ ํ์๋ i๋ฅผ 1๋งํผ ์ฆ๊ฐ์์ผ ๋ค์ ๋ฌธ์๋ก ์ด๋ํฉ๋๋ค.
4. ์ต์ ์ฒ๋ฆฌ
if i < length and (dartResult[i] == '*' or dartResult[i] == '#'):
if dartResult[i] == '*':
if answer:
answer[-1] *= 2 # ์ด์ ์ ์ 2๋ฐฐ ์ฒ๋ฆฌ
score *= 2 # ํ์ฌ ์ ์ 2๋ฐฐ
elif dartResult[i] == '#':
score *= -1 # ํ์ฌ ์ ์ ๋ง์ด๋์ค ์ฒ๋ฆฌ
i += 1
- ์ต์
์ฒ๋ฆฌ: ๋ณด๋์ค ๋ค์๋ *(์คํ์) ๋๋ #(์์ฐจ์)์ด ๋์ฌ ์ ์์ต๋๋ค. ์ด ์ต์
์ด ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก i < length ์กฐ๊ฑด์ผ๋ก ๋ฌธ์์ด์ด ๋๋์ง ์์๋์ง ๋จผ์ ํ์ธํ ํ์ ์ต์
์ ์ฒ๋ฆฌํฉ๋๋ค.
- *(์คํ์): ํ์ฌ ์ ์๋ฅผ 2๋ฐฐ๋ก ํ๊ณ , ์ด์ ์ ์๊ฐ ์์ผ๋ฉด ๊ทธ ์ ์๋ 2๋ฐฐ๋ก ๋ง๋ญ๋๋ค.
- #(์์ฐจ์): ํ์ฌ ์ ์๋ฅผ ๋ง์ด๋์ค๋ก ๋ง๋ญ๋๋ค.
- ์ต์ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ํ i๋ฅผ 1๋งํผ ์ฆ๊ฐ์์ผ ๋ค์ ๋ฌธ์๋ก ์ด๋ํฉ๋๋ค.
5. ์ ์ ์ ์ฅ
answer.append(score)
- ๊ณ์ฐ๋ ์ ์๋ฅผ answer ๋ฆฌ์คํธ์ ์ถ๊ฐํฉ๋๋ค. ์ด ๋ฆฌ์คํธ์๋ ๊ฐ ๋ผ์ด๋์์ ๊ณ์ฐ๋ ์ ์๊ฐ ์ฐจ๋ก๋๋ก ์ ์ฅ๋ฉ๋๋ค.
์ต์ข ์ฝ๋
def solution(dartResult):
answer = []
i = 0
length = len(dartResult)
while i < length:
# ์ซ์ ์ฒ๋ฆฌ (10 ์ฒ๋ฆฌ ํฌํจ)
if dartResult[i] == '1' and i + 1 < length and dartResult[i + 1] == '0':
score = 10
i += 2
else:
score = int(dartResult[i])
i += 1
# ๋ณด๋์ค ์ฒ๋ฆฌ (S, D, T)
if dartResult[i] == 'S':
score = score ** 1
elif dartResult[i] == 'D':
score = score ** 2
elif dartResult[i] == 'T':
score = score ** 3
i += 1
# ์ต์
์ฒ๋ฆฌ (*, #)
if i < length and (dartResult[i] == '*' or dartResult[i] == '#'):
if dartResult[i] == '*':
if answer:
answer[-1] *= 2 # ์ด์ ์ ์ 2๋ฐฐ ์ฒ๋ฆฌ
score *= 2 # ํ์ฌ ์ ์ 2๋ฐฐ
elif dartResult[i] == '#':
score *= -1 # ํ์ฌ ์ ์ ๋ง์ด๋์ค ์ฒ๋ฆฌ
i += 1
# ์ ์๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
answer.append(score)
return sum(answer)
728x90
๋ฐ์ํ