DHistory

[Programmers] Level 1 - [1차] 다트 게임 본문

Computer Science/Algorithm

[Programmers] Level 1 - [1차] 다트 게임

ddu0422 2023. 8. 8. 16:11

문제

 

프로그래머스

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

programmers.co.kr

 

풀이

"""
1. 3번의 기회
2. 0~10점
3. SDT (1제곱, 2제곱, 3제곱)
4. * (해당 점수와 바로 전에 얻은 점수를 2배) / # (마이너스)
5. * 첫 번째에서도 나올 수 있음
6. *는 중첩 가능
7. #과 *도 중첩 가능
8. SDT 점수마다 하나씩 존재
9. *, #은 점수마다 하나만 존재하거나 존재 x
"""
import re


def solution(dartResult):
    answer = []
    squares = {'S': 1, 'D': 2, 'T': 3}

    m = re.findall(r'([0-9]{1,})(S|D|T)(\*|#){0,1}', dartResult)
    
    for index, value in enumerate(m):
        number, square, option = value
        score = int(number) ** squares[square]

        if option == '#':
            score = -score

        if option == '*':
            score *= 2
            if index > 0:
                answer[index - 1] *= 2 

        answer.append(score)

    return sum(answer)

 

채점 결과