문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
설계
- 구현력 문제로 판단된다.
- .isnumeric 함수를 유용하게 사용했다.
# Single(S), Double(D), Triple(T)
# 스타상(*), 아차상(#)
def solution(dartResult):
answer = []
data = list(dartResult)
for i in range(len(data)):
if data[i].isdigit() == True: # 받은 문자열이 숫자 형태이면 정수로 변경
data[i] = int(data[i])
if data[i] == 'S':
pass
elif data[i] == 'D':
answer[-1] = answer[-1] ** 2
elif data[i] == 'T':
answer[-1] = answer[-1] ** 3
elif data[i] == '*':
if i > 2: # '*'은 최소 2번째 이상의 문자에서 첫 등장함
answer[-1] *= 2 # 바로 전의 점수 2배
answer[-2] *= 2 # 해당 점수 2배
else:
answer[-1] *= 2 # 첫번째에 나오면 2배
elif data[i] == '#': # 아차상이면 음수로 변경
answer[-1] *= -1
elif i < len(data) and data[i+1].isdigit(): # 연달아 정수가 나오는 수는 10밖에 없다.
answer.append(10)
elif type(data[i-1]) == int: # 앞전에 문자가 정수였으면 지나간다.
pass
else: # 정수인 숫자를 answer에 추가해준다.
answer.append(data[i]) # 계산이 적용된 숫자들을 모두 더한다.
return sum(answer)
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.08.13 |
---|---|
[프로그래머스] 체육복 (0) | 2022.08.12 |
[프로그래머스] 없는 숫자 더하기 (0) | 2022.08.10 |
[프로그래머스] 실패율 (0) | 2022.08.09 |
[프로그래머스] 음양 더하기 (0) | 2022.08.08 |