다트 게임

발자·2022년 9월 17일
0

programmers

목록 보기
11/34

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])([*#]?)')

🧩 불필요한 리스트를 여러 개 만들지 않고 하나로 사용하자.

0개의 댓글