본문 바로가기

알고리즘/프로그래머스

[Python] 다트 게임

https://school.programmers.co.kr/learn/courses/30/lessons/17682

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(dartResult):
    answer = 0
    result = []
    
    each_dart = []
    for i in dartResult:
        if each_dart==[]:
            each_dart.append(i)
        else:
            if each_dart[-1].isdigit() and i.isdigit():
                each_dart[-1] = each_dart[-1] + i
            elif not i.isdigit():
                each_dart.append(i)
            else:
                result.append(each_dart)
                each_dart = [i]
    result.append(each_dart)
    
    score = []
    for j in result:
        n = 0
        for t in j:
            if t.isdigit():
                n += int(t)
            elif t == 'S':
                n = n ** 1
            elif t == 'D':
                n = n ** 2
            elif t == 'T':
                n = n ** 3
            elif t == '*':
                if score == []:
                    n = n * 2
                else:
                    score[-1] = score[-1] * 2
                    n = n * 2
            elif t == '#':
                n = n * (-1)
        score.append(n)
        
    answer = sum(score)
    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

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 푸드 파이트  (0) 2023.01.09
[Python] 귤 고르기  (0) 2023.01.08
[Python] k진수에서 소수 개수 구하기  (0) 2023.01.06
[Python] 야근 지수  (0) 2023.01.05
[Python] 크기가 작은 부분 문자열  (0) 2023.01.04