Algorithm

[프로그래머스 lv1] 다트 게임

09009 2023. 10. 8. 23:43

문제 보기

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

 

프로그래머스

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

programmers.co.kr

문제 해결

10에 대한 예외처리를 해주어야 한다. 10을 문자열로 대체한 후 그 해당하는 문자열을 만났을 때 10을 입력해준다.

그리고 숫자를 만날때마다 num은 초기화하도록 해주고 문자 만나면 최근에 저장된 숫자 num을 리스트에 저장해준다.

 

 

소스 코드

- 직접 해결한 풀이

def solution(dartResult):
    answer = 0

    stack = []
    sign = []
    
    dartResult = dartResult.replace('10', 't')
       
    for i in dartResult:
        if i.isdigit():
            stack.append(int(i))
        elif i == 't':
            stack.append(10)
        else:    
            if i == 'S':
                stack[-1] = stack[-1]
            elif i == 'D':
                stack[-1] = stack[-1]**2
            elif i == 'T':
                stack[-1] = stack[-1]**3
            elif i == '*':
                sign.append(i)
                if len(stack) >= 2:
                    stack[-1] = stack[-1] * 2
                    stack[-2] = stack[-2] * 2 
                elif len(stack) == 1:
                    stack[-1] = stack[-1] * 2
            elif i == '#':
                sign.append(i)
                stack[-1] = stack[-1] * (-1)
                
    return sum(stack)

 

 

- 개선 풀이

def solution(dartResult):
    ans = []
    dartResult = dartResult.replace('10', 't')
       
    for i in dartResult:
        if i.isdigit():
            num = int(i) # 숫자 만날때마다 num은 초기화, 문자 만나면 최근에 저장된 숫자를 리스트에 저장
        elif i == 't':
            num = 10
        else:    
            if i == 'S':
                num = num**1
                ans.append(num)
            elif i == 'D':
                num = num**2
                ans.append(num)
            elif i == 'T':
                num = num**3
                ans.append(num)

            elif i == '*':
                if len(ans) >= 2:
                    ans[-1] = ans[-1] * 2
                    ans[-2] = ans[-2] * 2 
                elif len(ans) == 1:
                    ans[-1] = ans[-1] * 2
            elif i == '#':
                ans[-1] = ans[-1] * -1
                
    return sum(ans)
댓글수0