[1차] 다트 게임

Seogyu Gim·2020년 12월 8일
0

코딩테스트

목록 보기
43/47

내가 쓴 코드

def solution(d):
    answer = 0
    cur_s = 0
    pre_s = 0
    pre_o = 0
    i = 0
    while i < len(d):
        if d[i].isdecimal():
            n = 0
            while d[i].isdecimal():
                n = int(d[i]) + n * 10
                i += 1
            i -= 1
            pre_s = cur_s
            cur_s = n
        elif d[i] == 'S':
            answer += cur_s
        elif d[i] == 'D':
            answer += cur_s**2
            cur_s **= 2
        elif d[i] == 'T':
            answer += cur_s**3
            cur_s **= 3
        elif d[i] == '*':
            if pre_o == '*':
                answer += cur_s + pre_s*2
            elif pre_o == '#':
                answer += cur_s - pre_s
            else:
                answer += cur_s + pre_s
            pre_o = '*'
        elif d[i] == '#':
            answer -= cur_s*2
            pre_o = '#'
        i += 1
    return answer

배운 코드

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
profile
의미 있는 일을 하고싶은 개발자

0개의 댓글