티스토리 뷰
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/17682?language=python3
코드
def solution(dartResult):
answer = []
list_dartResult = list(dartResult)
demo = []
for i in range(len(list_dartResult)):
if list_dartResult[i] == '1' and list_dartResult[i+1] == '0':
demo.append('10')
elif list_dartResult[i] == '0' and list_dartResult[i-1] == '1':
continue
else:
demo.append(list_dartResult[i])
for i in range(1,len(demo)):
if demo[i] == 'S':
answer.append(int(demo[i-1]))
elif demo[i] == 'D':
answer.append(int(demo[i-1]) ** 2)
elif demo[i] == 'T':
answer.append(int(demo[i-1]) ** 3)
elif demo[i] == '*':
if len(answer) >= 2:
answer[-1] = answer[-1] * 2
answer[-2] = answer[-2] * 2
else:
answer[-1] = answer[-1] * 2
elif demo[i] == '#':
answer[-1] = answer[-1] * -1
return sum(answer)
점수가 0점에서 10점까지 나올 수 있기때문에 1,0 이 있을경우 10점으로 볼 수 있도록 demo리스트를 새로만들어 추가해주고 다음 검사 할떄 0이 나왔을때 앞에 값이 1일 경우에는 이미 10으로 넣었으니 continue 시켜준다. 나머지는 그대로 demo 리스트에 넣어준다.
demo리스트를 확인하면서 S,D,T일 경우에 각각 그대로, 제곱, 세제곱을 해줘 answer에 append 시켜준다.
그리고 *일 경우에는 answer에 추가된 값이 길이 2이상이면 마지막값 그 전에 값을 *2 해주고 길이가 2이상이 아니라면
맨마지막 값만 *2를 해준다.
그리고 #일 경우에는 맨마지막 값을 -1을 곱해주면 된다.
맨마지막 값을 바꿔주는 이유는 다트는 점수|보너스|옵션 순으로 들어오기 때문에 *,#이 나올 때는 그전에 값이 점수,보너스가 answer에 들어갔기 때문에 가장 최근에 들어간 값 answer[-1]을 바꿔주면 된다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level1, 내적 (Python) (0) | 2021.06.24 |
---|---|
[프로그래머스] Level1, 폰켓몬 (Python) (0) | 2021.06.18 |
[프로그래머스] Level1, 로또의 최고 순위와 최저 순위 (Python) (0) | 2021.06.18 |
[프로그래머스] Level1, 1차 비밀지도 (Python) (0) | 2021.06.18 |
[프로그래머스] Level1, 실패율 (Python) (0) | 2021.06.17 |
댓글