알고리즘/programmers[1]

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

fladi 2022. 1. 16. 15:11
728x90
def solution(dartResult):
    square = {"S":1, "D":2, "T":3}
    score = curr = prev = 0

    blockSet = []
    block = ""
    for d in dartResult:
        if d.isdigit() and (not block.isdigit()):  # 한 블록 완성
            blockSet.append(block)
            block = d
        else:
            block += d
    blockSet.append(block)

    for block in blockSet:
        num_str = ""

        for b in block:
            if b.isdigit():
                num_str += b
            elif b in ["S", "D", "T"]:
                curr = int(num_str)
                curr = curr ** square[b]
            elif b=="*":
                prev *= 2
                curr *= 2
            else:    # b=="#"
                curr *= -1

        score += prev
        prev = curr
        curr = 0

    score += prev

    return score

<내 풀이 분석>

1. dartResult을 한 턴에 해당하는 글자(3S*, 10T 등)들로 나누어 blockSet이라는 리스트에 넣어준다.

2. blockSet을 돌며 점수, 제곱수, 특수문자로 나누어 값을 만들어주고 curr(현재 계산값)에 넣어준다. *가 나왔을 경우 prev도 2배로 만들어준다.

3. score, prev, curr을 갱신한다. 

 

728x90