본문 바로가기
코딩공부/프로그래머스 (python)

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

by CodingKwon 2022. 8. 14.

문제 링크 (Level 1)

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

 

프로그래머스

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

programmers.co.kr

 

나의 코드 (Python)

def solution(dartResult):
    answer = 0
    stack = [] # 스택
    bouns = {"S":1, "D":2, "T":3} # 보너스 딕셔너리
    dartResult = dartResult.replace("10", "A") # 10인경우 한 자리로 바꾸기 위해 대체 문자 A
    for s in dartResult:
        if s.isdigit() or s == "A": # 0~10인 경우
            stack.append(10 if s == "A" else int(s)) # 스택에 숫자를 추가
        elif s in ("S", "D", "T"): # 보너스인 경우
            tmp = stack.pop()
            stack.append(tmp ** bouns[s])
        elif s in "*": # 옵션 "*"
            tmp = stack.pop()
            if len(stack): # 계산할 스택을 뺴고도 앞에 스택이 있다면?
                stack[-1] *= 2 # 계산할 스택 앞도 보너스 2배
            stack.append(tmp * 2) # 현재 계산하는 스택 2배
        elif s in "#": # 옵션 "#"
            stack[-1] *= -1 # 계산중인 스택 -1배
    answer = sum(stack) # 모든 스택을 더함
    return answer

 

이문제에서 10이라는 숫자를 for문으로 돌린다면 1, 0으로 분해되기 때문에 10을 대체할 'A'라는 문자로 바꿔서 하는 것이 포인트입니다.

또한, 스택을 이용하여 3번의 다트를 따로 계산한 다음 합쳐줄 수 있도록 해야합니다.

 

댓글