본문 바로가기

Coding test

[프로그래머스/Lv.1/파이썬] 다트게임

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

소스코드

def solution(dartResult):
    answer = 0  
    score = []
    for i in range (len(dartResult)):
        #숫자 추출
        if dartResult[i].isdigit():
            if dartResult[i] == '1' and dartResult[i+1] == '0':
                score.append(10)
            elif dartResult[i] == '0' and dartResult[i-1] == '1':
                continue
            else :
                score.append(int(dartResult[i]))
        #보너스 계산
        else :
            if dartResult[i] == 'D':
                score[-1] = score[-1] ** 2
            elif dartResult[i] == 'T':
                score[-1] = score[-1] ** 3
        #옵션 계산
            if dartResult[i] == '*':
                if len(score) > 1:
                    score[-2] *= 2
                    score[-1] *= 2
                else :
                    score[-1] *= 2
            elif dartResult[i] == '#':
                score[-1] *= (-1)
    return sum(score)

풀이

1. 숫자 찾기

1-1. dartResult의 내부 요소를 가지고 돌면서 숫자면 score에 넣는다

1-2. 만약 10이 있다면 10을 넣어주는 처리를 해줘야 함

2. 보너스 계산하기

2-1. S, D, T에 대해 처리를 해주는데 가장 최근에 등록된 점수에 대해 알맞는 제곱수를 연산해준다.

3. 옵션 계산하기

3-1. *일때 최근 등록 점수와 그 이전 점수에 대해 2를 곱해야 하는데 만약 원소가 1개 일때는 index error가 발생하게 된다.