[1차] 다트 게임 - Python

2023. 12. 13. 23:23공부/📝 프로그래머스

1. 풀이 코드

def solution(dartResult):
    answer = 0
    temp = ''
    score_list = []
    i = 0
    for item in dartResult:
        if item.isdigit():
            temp += item
        else:
            if item == 'S':
                score_list.append(int(temp) ** 1)
                i += 1
            elif item == 'D':
                score_list.append(int(temp) ** 2)
                i += 1
            elif item == 'T':
                score_list.append(int(temp) ** 3)
                i += 1
            elif item == '*':
                score_list[i - 1] = score_list[i - 1] * 2
                if i - 2 >= 0:
                    score_list[i - 2] = score_list[i - 2] * 2
            elif item == '#':
                score_list[i - 1] = score_list[i - 1] * (-1)
            temp = ''
    answer = sum(score_list)
    return answer

  입력된 내용을 deque로 처리할까 싶었지만, 최대한 간단한 함수로 풀었습니다.

 

2. 다른 사람 풀이 코드

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

  그런데 이런 정규표현식을 처리하는 방법도 있네요. 익숙하지 않은 방법이라 잘 몰랐습니다.

  첫 번째 입력은 1S2D*3T 일 때, dart에는  [(1, 'S', ''), (2, 'D', '*'), (3, 'T', '')]로 이루어지는군요. 이렇게 보니까 쉽게 이해가 됩니다.


 

프로그래머스

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

programmers.co.kr

 

'공부 > 📝 프로그래머스' 카테고리의 다른 글

숫자 짝꿍 - Python  (0) 2024.01.25
로또의 최고 순위와 최저 순위 - Python  (0) 2024.01.24
실패율 - Python  (0) 2023.12.13
덧칠하기 - Python  (0) 2023.12.11
기사단원의 무기 - Python  (0) 2023.12.10