눈송이의 개발생활
[Programmers Lv.1]다트 게임 (Python) 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/17682
내 코드
def solution(dartResult):
dartResult = dartResult.replace('10', 'k')
bonus = {'S': 1, 'D': 2, 'T': 3}
temp = []
for i in dartResult:
if i.isdigit():
temp.append(int(i))
elif i == 'k':
temp.append(10)
elif i in bonus:
temp[-1] = temp[-1] ** bonus[i]
elif i == '#':
temp[-1] *= -1
elif i == '*':
temp[-1] *= 2
if len(temp) > 1:
temp[-2] *= 2
return sum(temp)
해결 방법
사실 이 문제는 혼자 해보다가 잘 안돼서 질문글을 참고해서 풀었다...
10을 해결하는게 어려웠는데, replace를 통해서 한 글자로 바꾸고 그 뒤에 계산을 하는 아이디어를 다른 사람의 풀이에서 얻었다.
S, D, T의 경우를 다 나누지 않고 딕셔너리에 넣어 풀면 더 쉽다는 것도 배웠다.
또한 '*'이 까다롭다고 생각했었는데, '#'와 함께 있는 것도 따로 보려고 해서 더 어렵게 느꼈던 것 같다.
'#'와 '*'가 함께 오는 경우라도, '*'이 오기 전에도 stack에 숫자가 남아 있으면 2배를 해주면 동시에 해결된다는 것을 나중에야 볼 수 있었다.
어려운 문제는 아니지만 생각하는 힘이 더 필요하다고 느꼈다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers Lv.1]K번째수 (Python) (0) | 2022.04.05 |
---|---|
[Programmers Lv.1]체육복 (Python) (0) | 2022.04.04 |
[Programmers Lv.1]로또의 최고 순위와 최저 순위(Python) (0) | 2022.03.29 |
[Programmers Lv.1]실패율 (Python) (0) | 2022.03.28 |
[Programmers Lv.1]신고 결과 받기 (Python) (0) | 2022.03.26 |
Comments