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)