본문 바로가기
프로그래머스/1단계

(Python/LV1) 다트게임

by windy7271 2022. 9. 14.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/17682

 

프로그래머스

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

programmers.co.kr

풀이:

 

def solution(dartResult):

	point = ['10' if i =='A' else i for i in dartResult.replace('10', 'A')] # 다시 A 이면 10으로 해서 저장
    dic = {"S" : 1,
           "D" : 2,
           "T" : 3}
	# dic 저장
    stack = []
	# stack 만듦
    
    for i in point:
        if i.isnumeric() or i =="A":
            stack.append(10 if i =="A" else int(i))
        elif i in["S", "D", "T"]:
            now = stack.pop()
            stack.append(now ** dic[i] ) #  s, d, t 에 따라 제곱해줌
        elif i =="#":
            stack[-1] *= -1 # #이면 -1을 곱하고
        elif i == "*":		# * 이면 
            now = stack.pop()	# 뽑아본다
            if len(stack):		# 두번째 별 나왔을때 첫번째 숫자도 2 곱해줘야함
                stack[-1] *= 2
            stack.append(2 * now)	# 지금 뽑은 숫자도 2 곱해줘야하고

    return sum(stack)	# 합쳐서 리턴





print(solution("1S*2T*3S"))

 

이건 어려움

 

다른 분 풀이: 

import re


def solution(dartResult):
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    print(p)
    dart = p.findall(dartResult)
    print(dart)
    for i in range(len(dart)):
        if dart[i][2] == '*' and i > 0:
            dart[i-1] *= 2
        dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]

    answer = sum(dart)
    return answer

굉장한 식이다 

 

반응형

댓글