[프로그래머스](python) 다트 게임 - 2018 KAKAO BLIND RECRUITMENT

berry ·2021년 7월 28일
0

Algorithm

목록 보기
54/77
post-thumbnail

문제


🧩 수도 코드

dartresult 원소 하나하나 판별하여 stacklist에 넣어준다.
S,D,T 중 하나이면 stacklist에서 먼저 들어간 숫자를 빼낸 다음 계산 후 다시 stacklist에 넣는다.


🏁 내 풀이

def solution(dartresult):
    dartresult = dartresult.replace('10','A')
    tmp = []
    bonus = {'S': 1, 'D': 2, 'T': 3}
    option = {'*': 2, '#': -1}

    for dart in dartresult:
        if dart.isdigit() or dart == 'A': # 숫자인지 판별
            tmp.append(10 if dart == 'A' else int(dart)) #숫자일 때
        elif dart in ('S','D','T'): #SDT
            last = tmp.pop()
            tmp.append(last ** bonus[dart])
        elif dart == '#':
            tmp[-1] *= option[dart] # lastnumber * -1
        elif  dart == '*':
            last = tmp.pop()
            if len(tmp): # if len(tmp) is not 0
                tmp[-1] *= option[dart] #lastnumber * 2
            tmp.append(last * option[dart])
    return sum(tmp)
dartresult = dartresult.replace('10','A')
tmp = []
bonus = {'S': 1, 'D': 2, 'T': 3}
option = {'*': 2, '#': -1}

10이 나오면 1,0 따로 계산하기 때문에 10을 A로 미리 바꾸어두었다.
tmp로 stacklist 작성
bonus, option은 딕셔너리 값으로 지정해주었다.

for dart in dartresult:
    if dart.isdigit() or dart == 'A': 
        tmp.append(10 if dart == 'A' else int(dart)) 

dartresult에서 dart값이 숫자인지 판별한다.
dart가 숫자이거나, 'A'이면(10이면)
tmp(stacklist)에 int(dart) 또는 10을 넣는다.

    elif dart in ('S','D','T'): #SDT
        last = tmp.pop()
        tmp.append(last ** bonus[dart])

dart값이 S,D,T 중에 하나이면
tmp에 넣은 수를 빼서 bonus 값으로 계산 후 다시 tmp에 넣는다.

    elif dart == '#':
        tmp[-1] *= option[dart] 
    elif  dart == '*':
        last = tmp.pop()
        if len(tmp): 
            tmp[-1] *= option[dart] 
        tmp.append(last * option[dart])

dart값이 '#'이면
tmp에서 마지막 값과 option의 -1값을 곱한다. (-1 곱이라 값을 빼내지않고 그냥 곱했음)

dart값이 '*'이면
tmp에서 마지막 값을 빼내고,

if len(tmp)

tmp값이 0이 아니면 tmp의 마지막 값과 option의 2를 곱하고 tmp에 더한다.


📌 .isdigit()

숫자인지 아닌지 판별하는 함수

📌dictionary


🧩 다른 풀이

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
Engineer

0개의 댓글