[프로그래머스] [1차] 다트 게임Lv.1 - Python

GoshK·2022년 1월 29일
0

[프로그래머스] Python

목록 보기
27/68
post-thumbnail

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

나의 풀이

def solution(dartResult):
    temp = ''
    score = []
    for i in list(dartResult):
        i = str(i)
        if i.isnumeric():
            temp += i
        elif i == "S":
            temp = pow(int(temp), 1)
            score.append(temp)
            temp = ''
        elif i == "D":
            temp = pow(int(temp), 2)
            score.append(temp)
            temp = ''
        elif i == "T":
            temp = pow(int(temp), 3)
            score.append(temp)
            temp = ''
        elif i == "*":
            if len(score) == 1:
                score[0] *= 2
            else:
                idx = len(score)
                score[idx - 2], score[idx - 1] = score[idx - 2] * 2, score[idx - 1] * 2
        elif i == "#":
            score[-1] *= -1

    return sum(score)
  • 입력값을 한 자리씩 돌면서, 해당 문자가 숫자형이라면, temp 변수에 더해준다.
  • 10을 세기 위해 문자형으로 더해준다. ex '1' + '0' = '10'
  • 숫자 뒤에는 항상 S,D,T 가 온다.
  • 각 알파벳에 맞게 점수를 계산해주고 리스트에 담아준다. 그리고 temp 변수를 초기화 해준다.
  • '*' 와 '#' 는 리스트에 넣은 점수를 활용한다.
  • '*' 일 경우 리스트에 원소가 하나만 있다면, 해당 원소만 2를 곱해준다.
  • 원소가 2개 이상일 경우에는, 현재 원소와 전의 원소에 2를 곱해줘야 하기 때문에 현재 리스트의 사이즈 -2, -1 에 해당하는 인덱스에 2를 곱해준다.
  • '#' 일 경우에는 [-1] 을 사용하여 리스트의 마지막 원소, 즉 현재 원소에 -1을 곱해준다.

다른 사람 풀이 & 느낀점

정규식을 사용하여 문제를 엄청 깔끔하게 해결하였다.😳

0개의 댓글