728x90
def solution(dartResult):
square = {"S":1, "D":2, "T":3}
score = curr = prev = 0
blockSet = []
block = ""
for d in dartResult:
if d.isdigit() and (not block.isdigit()): # 한 블록 완성
blockSet.append(block)
block = d
else:
block += d
blockSet.append(block)
for block in blockSet:
num_str = ""
for b in block:
if b.isdigit():
num_str += b
elif b in ["S", "D", "T"]:
curr = int(num_str)
curr = curr ** square[b]
elif b=="*":
prev *= 2
curr *= 2
else: # b=="#"
curr *= -1
score += prev
prev = curr
curr = 0
score += prev
return score
<내 풀이 분석>
1. dartResult을 한 턴에 해당하는 글자(3S*, 10T 등)들로 나누어 blockSet이라는 리스트에 넣어준다.
2. blockSet을 돌며 점수, 제곱수, 특수문자로 나누어 값을 만들어주고 curr(현재 계산값)에 넣어준다. *가 나왔을 경우 prev도 2배로 만들어준다.
3. score, prev, curr을 갱신한다.
728x90
'알고리즘 > programmers[1]' 카테고리의 다른 글
[프로그래머스] 소수 만들기: python3 (0) | 2022.01.16 |
---|---|
[프로그래머스] [1차] 다트 게임 다른 풀이 (0) | 2022.01.16 |
[프로그래머스] 하샤드 수: python3 (0) | 2022.01.16 |
[프로그래머스] 신고 결과 받기: python3 (0) | 2022.01.16 |
[프로그래머스] 내적 (0) | 2022.01.10 |