๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/17682
๋ฌธ์ ์ค๋ช
result, prev, curr์ ๊ฐ๊ฐ ๋์ ์ ์, ๋ฐ๋ก ์ง์ ์ ์, ํ์ฌ ์ ์๋ฅผ ์ ์ฅํ์ต๋๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ๋๋ฉด์ ๋ค์์ ๊ณ์ฐํฉ๋๋ค.
- ๋ฌธ์๊ฐ ์ซ์(0~9)๋ผ๋ฉด
1) result์ prev๋ฅผ ๋ํ๋ค. (prev๋ ์ด์ ๋ณด๋์ค๋ ์ต์ ์ด ์ ์ฉ ์๋๋ฏ๋ก)
2) curr๊ฐ prev๊ฐ ๋๋ค.
3) ํ์ฌ ๋ฌธ์๊ฐ curr๊ฐ ๋๋ค. - ๋ฌธ์๊ฐ ๋ณด๋์ค(S, D, T)๋ผ๋ฉด
1) D์ผ ๊ฒฝ์ฐ curr์ ์ ๊ณฑํ๋ค.
2) T์ผ ๊ฒฝ์ฐ curr์ ์ธ์ ๊ณฑ ํ๋ค. - ๋ฌธ์๊ฐ ์ต์
(*, #)์ด๋ผ๋ฉด
1) *์ผ ๊ฒฝ์ฐ prev์ curr์ 2๋ฅผ ๊ณฑํด ๋ ๋ฐฐ๋ก ๋ง๋ ๋ค.
2) #์ผ ๊ฒฝ์ฐ curr์ -1์ ๊ณฑํด ํด๋น ์ ์๋ฅผ ๋ง์ด๋์ค๋ก ๋ง๋ ๋ค.
๋ง์ง๋ง์ (result+ prev + curr)๋ฅผ ๋ฐํํจ์ผ๋ก์จ (์ฒซ ๋ฒ์งธ ์ ์ + ๋ ๋ฒ์งธ ์ ์ + ์ธ ๋ฒ์งธ ์ ์)๋ฅผ ๋ฐํํฉ๋๋ค.
์ฃผ์ํ ์ ์ 1๋ฒ ๊ณผ์ ์์ 10์ ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค.
ten = False for i in range(len(dartResult)): if dartResult[i].isdecimal(): # ์ ์: 0 ~ 10์ฌ์ด์ ์ ์ if ten: ten = False continue # (์ค๋ต) if curr == 1 and dartResult[i + 1] == '0': # 10์ ์์ธ์ฒ๋ฆฌ curr = 10 ten = True
์์ ๊ฐ์ด ํ์ฌ ๋ฌธ์๊ฐ 1์ด๊ณ ๋ค์ ๋ฌธ์๊ฐ 0์ด๋ฉด 10์ ์ด๋ฏ๋ก curr์ 10์ ์ ์ฅํ๊ณ , ten์ด๋ผ๋ ์ผ์ข ์ ํ๋๊ทธ(flag) ๋ณ์๋ฅผ True๋ก ์ค์ ํด์ค๋๋ค.
๊ทธ ๋ค์ ๋ฐ๋ณต๋ฌธ์ ์คํํ๋ฉด dartResult[i] == 0์ด์ง๋ง ten์ด True๊ธฐ ๋๋ฌธ์ ๋ค์ ๊ณผ์ ์ ์๋ตํ๊ณ ๋ฐ๋ณต๋ฌธ์ continueํ๊ฒ ๋ฉ๋๋ค.
์์ค์ฝ๋
def solution(dartResult): # ๋์ ์ ์, ์ด์ ์ ์, ํ์ฌ ์ ์ result, prev, curr = 0, 0, 0 ten = False for i in range(len(dartResult)): if dartResult[i].isdecimal(): # ์ ์: 0 ~ 10์ฌ์ด์ ์ ์ if ten: ten = False continue result += prev prev = curr curr = int(dartResult[i]) if curr == 1 and dartResult[i + 1] == '0': # 10์ ์์ธ์ฒ๋ฆฌ curr = 10 ten = True elif dartResult[i].isalpha(): # ๋ณด๋์ค: S, D, T if dartResult[i] == 'D': curr = curr ** 2 elif dartResult[i] == 'T': curr = curr ** 3 else: # ์ต์ : *, # if dartResult[i] == '*': prev *= 2 curr *= 2 elif dartResult[i] == '#': curr *= -1 return result + prev + curr