본문 바로가기

프로그래머스 알고리즘 문제/Level 1

프로그래머스 Level 1 - [1차] 다트 게임

내 정답:

 

코드가 참 더럽다.

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

 

가장 아름다운 답인 것 같다. 정규표현식으로 깔끔하게 정리했다.