[1차] 다트 게임 - Python
2023. 12. 13. 23:23ㆍ공부/📝 프로그래머스
1. 풀이 코드
def solution(dartResult):
answer = 0
temp = ''
score_list = []
i = 0
for item in dartResult:
if item.isdigit():
temp += item
else:
if item == 'S':
score_list.append(int(temp) ** 1)
i += 1
elif item == 'D':
score_list.append(int(temp) ** 2)
i += 1
elif item == 'T':
score_list.append(int(temp) ** 3)
i += 1
elif item == '*':
score_list[i - 1] = score_list[i - 1] * 2
if i - 2 >= 0:
score_list[i - 2] = score_list[i - 2] * 2
elif item == '#':
score_list[i - 1] = score_list[i - 1] * (-1)
temp = ''
answer = sum(score_list)
return answer
입력된 내용을 deque로 처리할까 싶었지만, 최대한 간단한 함수로 풀었습니다.
2. 다른 사람 풀이 코드
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
그런데 이런 정규표현식을 처리하는 방법도 있네요. 익숙하지 않은 방법이라 잘 몰랐습니다.
첫 번째 입력은 1S2D*3T 일 때, dart에는 [(1, 'S', ''), (2, 'D', '*'), (3, 'T', '')]로 이루어지는군요. 이렇게 보니까 쉽게 이해가 됩니다.
'공부 > 📝 프로그래머스' 카테고리의 다른 글
숫자 짝꿍 - Python (0) | 2024.01.25 |
---|---|
로또의 최고 순위와 최저 순위 - Python (0) | 2024.01.24 |
실패율 - Python (0) | 2023.12.13 |
덧칠하기 - Python (0) | 2023.12.11 |
기사단원의 무기 - Python (0) | 2023.12.10 |