프로그래머스 LV1 - [1차] 다트 게임
풀이
def solution(dartResult):
score = ''
bonus = {'S': 1, 'D': 2, 'T': 3}
result = []
for dart in dartResult:
if dart.isdigit():
score += dart
elif dart in bonus:
result.append(int(score) ** bonus[dart])
score = ''
elif dart == "#":
result[-1] = result[-1] * (-1)
elif dart == '*':
result[-1] = result[-1] * (2)
if len(result) >=2:
result[-2] = result[-2] * (2)
return sum(result)
다른 풀이
def solution(dartResult):
result = [] # 각 던질 다트의 결과를 저장하는 리스트
rule = {
"S" : 1, # Single 점수는 제곱하지 않음
"D" : 2, # Double 점수는 제곱
"T" : 3, # Triple 점수는 세제곱
}
score = "" # 현재 읽고 있는 숫자를 저장하는 변수
for i in dartResult:
# 현재 문자가 숫자인 경우, 현재 숫자를 계속 추가
if i.isdigit():
score += i
# 현재 문자가 보너스(S, D, T)인 경우, 점수를 계산하고 리스트에 추가
elif i in rule:
result.append(int(score) ** rule[i])
score = "" # 현재 숫자 초기화
# 현재 문자가 '#'인 경우, 마지막으로 추가한 점수를 음수로 만듦
elif i == "#":
result[-1] *= -1
# 현재 문자가 '*'인 경우, 마지막으로 추가한 점수를 2배로 만듦
elif i == "*":
result[-1] *= 2
# 만약 두 번째로 추가한 점수가 존재하면 두 번째 점수도 2배로 만듦
if len(result) >= 2:
result[-2] *= 2
# result의 모든 원소들의 합을 반환
return sum(result)
출처: https://1ets-just-do-it.tistory.com/82 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
보너스를 dict 타입에 저장하였고 문자를 읽으면서 보너스가 나왔을시에 초기화를 하며 리스트에 적절히 저장하며 데이터를 이용하였다.
배울 점
- dict 타입의 활용
- list에 적절히 저장하여 보너스와 옵션으로 데이터 변환
댓글남기기