내 정답:
코드가 참 더럽다.
def solution(dartResult):
def power(str):
if str == 'S': return 1
elif str == 'D': return 2
return 3
scores = [0,0,0]
res = dartResult.replace('10', ' ten')
for i in '0123456789':
res = res.replace(i,' ' + i)
res = res.replace('ten', '10')
rstr = res.split()
print(rstr)
for i in range(3):
isTen = False
if rstr[i][1].isdigit(): isTen = True
if isTen:
sc = int(rstr[i][:2]) ** power(rstr[i][2])
if rstr[-1] == '*':
sc *= 2
if i != 0:
scores[i-1] *= 2
if rstr[-1] == '#':
sc = -sc
else:
sc = int(rstr[i][0]) ** power(rstr[i][1])
if rstr[i][-1] == '*':
sc *= 2
if i != 0:
scores[i-1] *= 2
elif rstr[i][-1] == '#':
sc *= -1
print(sc)
scores[i] = sc
return sum(scores)
다른 사람들의 정답:
정규표현식
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
가장 아름다운 답인 것 같다. 정규표현식으로 깔끔하게 정리했다.
'프로그래머스 알고리즘 문제 > Level 1' 카테고리의 다른 글
프로그래머스 Level 1 - 실패율 (0) | 2020.08.18 |
---|---|
프로그래머스 Level 1 - 예산 (0) | 2020.08.18 |
프로그래머스 Level 1 - 콜라츠 추측 (0) | 2020.08.18 |
프로그래머스 Level 1 - 키패드 누르기 (0) | 2020.08.18 |
프로그래머스 Level 1 - 2016년 (0) | 2020.08.17 |