Problem Solving/Programmers

[Programmers] 2018 KAKAO BLIND RECRUITMENT: [1차] 다트 게임

이진2 2021. 2. 5. 20:42

programmers.co.kr/learn/courses/30/lessons/17682

 

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

 

programmers.co.kr

2018년 카카오 공개채용 기출문제이다

"점수|보너스|[옵션]"으로 이루어진 문자열 3세트가 연속적으로 주어졌을 때, 점수의 총 합계를 계산하는 문제

보너스는 (S, D, T)가 존재하고, 각각 점수에 square를 취한다. 옵션은 "*"은 현재, 그리고 이전 점수에 *2를 하며, "#"은 현재 점수에 -1을 취한다.

이렇게 각각의 점수를 구한 뒤, 마지막에 list에 있는 elements를 모두 더해주면 끝

처음에는 스택으로 접근해야 하나 했지만 파이썬의 list로 간단하게 풀 수 있었다

해설에서는 정규식을 사용한 풀이도 추천한다고 했는데, 이후의 기출에서도 왠지 나올 것 같으니 파이썬 정규식에 대해 공부 해 봐야 겠다.

def solution(dartResult):
    answer = 0
    li=list()

    b=False
    for i in range(len(dartResult)):
        if b:
            b=False
            continue
        if(dartResult[i:i+2]=='10'):
            li.append(int(10))
            b=True            
            continue
        c=dartResult[i]
        if c>='0' and c<='9':
            li.append(int(c))
        elif c=='D':
            li[-1]=pow(li[-1],2)
        elif c=='T':
            li[-1]=pow(li[-1],3)
        elif c=='*':
            li[-1]*=2
            if len(li)>1:
                li[-2]*=2
        elif c=='#':
            li[-1]*=-1

    for i in li:
        answer+=i       
        
    return answer