공부/코딩테스트

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT 다트 게임(파이썬)

ghhong 2021. 1. 14. 11:20

 

나의 답 :

def solution(dartResult):
    s=[]
    score=[]
    s+=dartResult[0]
    answer = 0
    for i in dartResult[1:]:
        if i=='0' and s[-1]=='1':
            s[-1] = '10'
            continue
        if i.isdigit():
            if s[-1].isalpha():
                s.append('-')    
            s.append(i)
        elif i=='S' or i=='D' or i=='T':
            s.append(i)
        elif i=='*' or i=='#':
            s.append(i)
    print(s)
    for i in range(len(s)):
        print(score)
        if s[i].isdigit():
            score.append(int(s[i]))
        elif s[i] == 'S':
            score.append(0)
        elif s[i] == 'D':
            score.append(0)
            score[i-1] = score[i-1]**2
        elif s[i] == 'T':
            score.append(0)
            score[i-1] = score[i-1]**3
        elif s[i] == '*':
            score.append(0)
            score[i-2] *= 2
            if i>=5:
                score[i-5] *= 2
        elif s[i] == '#':
            score.append(0)
            score[i-2] *= (-1)
        elif s[i] == '-':
            score.append(0)
    print(score)
    return sum(score)

 

다른 사람의 답 :

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

 

다른 사람의 답은 정규표현식을 사용했다.