티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/17682?language=python3 

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

코드

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]을 바꿔주면 된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31