본문 바로가기

알고리즘/프로그래머스

[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 다트 게임

[ 문제 ]

 

 


[출제 의도]

 

  • 문자열 처리

[ 문제 풀이 ]

 

보너스와 옵션에 맞춰 누적된 숫자에 계산해주면 됩니다.

다만, 이를 문자열을 한 글자씩 처리할 경우 신경써서 처리해야 할 부분이 생깁니다. 두 자리 수입니다.

두 자리 수는 10밖에 없습니다. 따라서 10을 미리 한 자리 문자열로 치환하면 계산을 쉽게 처리할 수 있습니다.

 


[ 정답 코드 ]

 

# S: 1제곱, D: 2제곱, T: 3제곱
# *: 해당 점수와 바로 전에 얻은 점수를 각 2배
# #: 해당 점수를 마이너스

def solution(dartResult):
    li = []
    i = -1

    dartResult = dartResult.replace("10", "K")
    for n in dartResult:
        if n == "S":
            continue

        elif n == "D":
            li[i] **= 2

        elif n == "T":
            li[i] **= 3

        elif n == "*":
            # 예외 처리
            if i == 0:
                li[i] *= 2

            else:
                li[i] *= 2
                li[i - 1] *= 2

        elif n == "#":
            li[i] *= -1

        else:
            # 예외 처리
            if n == "K":
                n = 10
            li.append(int(n))
            i += 1
    return sum(li)


print(solution("1D2S#10S"))