PS (Problem Solving)/Programmers

[프로그래머스] [1차] 다트 게임

캐럿노트 2022. 8. 11. 22:50

문제

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

 

프로그래머스

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

programmers.co.kr

 

설계

- 구현력 문제로 판단된다.

- .isnumeric 함수를 유용하게 사용했다.

# Single(S), Double(D), Triple(T)
# 스타상(*), 아차상(#)

def solution(dartResult):
    answer = []
    data = list(dartResult)
    for i in range(len(data)):
        if data[i].isdigit() == True:   # 받은 문자열이 숫자 형태이면 정수로 변경
            data[i] = int(data[i])

        if data[i] == 'S':
            pass
        elif data[i] == 'D':
            answer[-1] = answer[-1] ** 2
        elif data[i] == 'T':
            answer[-1] = answer[-1] ** 3
        elif data[i] == '*':
            if i > 2:   # '*'은 최소 2번째 이상의 문자에서 첫 등장함
                answer[-1] *= 2     # 바로 전의 점수 2배
                answer[-2] *= 2     # 해당 점수 2배
            else:
                answer[-1] *= 2     # 첫번째에 나오면 2배
        elif data[i] == '#':		# 아차상이면 음수로 변경
            answer[-1] *= -1
        elif i < len(data) and data[i+1].isdigit():     # 연달아 정수가 나오는 수는 10밖에 없다.
            answer.append(10)
        elif type(data[i-1]) == int:    # 앞전에 문자가 정수였으면 지나간다.
            pass
        else:                           # 정수인 숫자를 answer에 추가해준다.
            answer.append(data[i])      # 계산이 적용된 숫자들을 모두 더한다.

    return sum(answer)