import re
def solution(dartResult):
# 결과 분리를 위한 정규표현식
rl = re.compile('\d+\D\**#*')
results = rl.findall(dartResult)
# 결과별 점수 계산
points = [1, 1, 1]
for i in range(0, len(results)) :
# 옵션 처리
if '*' in results[i] :
results[i] = results[i].replace('*', '')
if i == 0 :
points[0] *= 2
else :
points[i] *= 2
points[i-1] *= 2
if '#' in results[i] :
results[i] = results[i].replace('#', '')
points[i] *= -1
# 보너스 처리 후 점수 처리
if 'S' in results[i] :
results[i] = results[i].replace('S', '')
points[i] *= int(results[i])**1
if 'D' in results[i] :
results[i] = results[i].replace('D', '')
points[i] *= int(results[i])**2
if 'T' in results[i] :
results[i] = results[i].replace('T', '')
points[i] *= int(results[i])**3
return sum(points)
🧩 정규표현식에서 ()
괄호로 그룹을 만들어서 점수, 보너스, 옵션을 구분 지으면 더욱 편리하다.
import re
rl = re.compile('(\d+)([SDT])([*#]?)')
🧩 불필요한 리스트를 여러 개 만들지 않고 하나로 사용하자.