유형 : 구현

시간 : 20분

 

def solution(dartResult):
    answer = []
    drlist = list(dartResult)
    
    #각 문자열의 list 생성
    score = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
    bonus = ['S', 'D', 'T']
    option = ['*', '#']
    
    #문자열의 문자 하나씩 순회 
    ansidx = -1
    flag = False
    for i in range(len(drlist)):
        if flag == True:
            flag = False
            continue
        elif drlist[i] in score:
            if drlist[i] == '1':
                if drlist[i+1] == '0':
                    answer.append(10)
                    ansidx += 1
                    flag = True
                else: 
                    answer.append(int(drlist[i]))
                    ansidx += 1
            else:
                answer.append(int(drlist[i]))
                ansidx += 1
        elif drlist[i] in bonus:
            if drlist[i] == 'D':
                answer[ansidx] = answer[ansidx] ** 2
            elif drlist[i] == 'T':
                answer[ansidx] = answer[ansidx] ** 3
        elif drlist[i] in option:
            if drlist[i] == '*':
                answer[ansidx] *= 2
                if ansidx > 0:
                    answer[ansidx-1] *= 2 
            if drlist[i] == '#':
                answer[ansidx] = -answer[ansidx]
    return sum(answer)

 

내 풀이는 좀 길다.. 최적화를 좀 해보자. 

우선 list comprehension을 통해서 option을 좀 더 쉽게 처리하는 방법이 있었다.

10의 경우에도 다른 풀이에서는 10을 k 등 다른 알파벳으로 대체하는 방법을 사용하였다. 

'프로그래머스 > Lv. 1' 카테고리의 다른 글

45. 둘만의 암호  (0) 2024.07.16
44. 로또의 최고 순위와 최저 순위  (0) 2024.07.16
42. 기사단원의 무기 ★★ (약수의 개수)  (0) 2024.07.16
41. 옹알이 (2)  (0) 2024.07.16
40. 실패율  (1) 2024.07.16
복사했습니다!