Haribo ML, AI, MATH, Algorithm

다트 게임


다트 게임

코드

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

핵심

  1. 보너스와 옵션 정의: bonusoption 딕셔너리를 정의하여 각 보너스(S, D, T)와 옵션(*, #)에 대한 계산 규칙을 설정.
  2. 정규식 패턴: 정규식 (\d+)([SDT])([*#]?) 해석:
    • \d+: 하나 이상의 숫자 (점수)
    • [SDT]: ‘S’, ‘D’, ‘T’ 중 하나 (보너스)
    • [*#]?: ‘*’, ‘#’ 중 하나, 없을 수도 있음 (옵션)
  3. 정규식을 통한 점수 추출: findall 메소드를 사용해 dartResult 문자열에서 정규식에 맞는 모든 부분을 찾아 dart 리스트에 저장.
  4. 점수 계산:
    • for 루프를 사용하여 각 다트 기회에 대해 반복.
    • 스타상(‘*‘)이 있고 첫 번째 기회가 아닐 경우(i > 0), 이전 점수(dart[i-1])를 두 배로.
    • 현재 점수(dart[i])는 점수를 보너스에 해당하는 제곱으로 계산하고, 옵션에 따른 배수를 적용.
  5. 최종 점수 계산: 모든 다트 기회에 대한 점수(dart)를 합산하여 answer에 저장하고 반환.

Similar Posts

다음 포스트 [1차] 비밀지도

Comments