문제 링크 (Level 1)
https://school.programmers.co.kr/learn/courses/30/lessons/17682
나의 코드 (Python)
def solution(dartResult):
answer = 0
stack = [] # 스택
bouns = {"S":1, "D":2, "T":3} # 보너스 딕셔너리
dartResult = dartResult.replace("10", "A") # 10인경우 한 자리로 바꾸기 위해 대체 문자 A
for s in dartResult:
if s.isdigit() or s == "A": # 0~10인 경우
stack.append(10 if s == "A" else int(s)) # 스택에 숫자를 추가
elif s in ("S", "D", "T"): # 보너스인 경우
tmp = stack.pop()
stack.append(tmp ** bouns[s])
elif s in "*": # 옵션 "*"
tmp = stack.pop()
if len(stack): # 계산할 스택을 뺴고도 앞에 스택이 있다면?
stack[-1] *= 2 # 계산할 스택 앞도 보너스 2배
stack.append(tmp * 2) # 현재 계산하는 스택 2배
elif s in "#": # 옵션 "#"
stack[-1] *= -1 # 계산중인 스택 -1배
answer = sum(stack) # 모든 스택을 더함
return answer
이문제에서 10이라는 숫자를 for문으로 돌린다면 1, 0으로 분해되기 때문에 10을 대체할 'A'라는 문자로 바꿔서 하는 것이 포인트입니다.
또한, 스택을 이용하여 3번의 다트를 따로 계산한 다음 합쳐줄 수 있도록 해야합니다.
'코딩공부 > 프로그래머스 (python)' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 (Python) (0) | 2022.09.13 |
---|---|
[프로그래머스] 최댓값과 최솟값 (Python) (0) | 2022.09.07 |
[프로그래머스] 콜라츠 추측 (Python) (0) | 2022.08.14 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (Python) (0) | 2022.08.11 |
[프로그래머스] 정수 내림차순으로 배치하기 (Python) (0) | 2022.08.11 |
댓글