연습장

29. 다트 게임 본문

프로그래머스/1단계

29. 다트 게임

js0616 2024. 1. 22. 21:24

정답률이 높은 순서에서 낮은 순서로 해결하던 중에 건너 뛰었던 유일한 문제이다. 

정답률에 비해서 뭔가 어려운 느낌이 든다. 

 

 

dartResult 의 입력으로 answer 의 출력이 나오게 된다.

 

점수 | 보너스 | 옵션  의 1set 으로 총 3set 의 점수를 하나로 한다. 

 

점수는 0~10 까지

보너스는 앞의 점수를 S 1제곱  D 2제곱  T  3제곱

옵션은 *과 # 으로 

* : 해당 점수와 그 앞에 점수를 2배로 만든다

# : 해당 점수에 x ( -1 )

 


dartResult  의 문자열을 3set로 각각 나눈 뒤

점수를 구했다. 

굉장히 비효율적인 코드가 나온거같다. 

 

 

def solution(dartResult):
    answer = 0
    num1 = ''
    num2 = ''
    num3 = ''
    
    # num1
    for i in range(2,len(dartResult)):
        if dartResult[i] in ['1','2','3','4','5','6','7','8','9','0']:
            num1 = dartResult[:i]
            dartResult = dartResult[i:]
            break
            
    # num2 
    for i in range(2,len(dartResult)):
        if dartResult[i] in ['1','2','3','4','5','6','7','8','9','0']:
            num2 = dartResult[:i]
            dartResult = dartResult[i:]
            break
            
    # num3 
    num3 = dartResult
    
    ###########   
    score1 = ''
    bonus1 = ''
    option1 = ''
    
    if num1[-1] in ['*', '#']:
        score1 = int(num1[:-2])
        bonus1 = num1[-2]
        option1 = num1[-1]
    else :
        score1 = int(num1[:-1])
        bonus1 = num1[-1]
    
    if bonus1 == 'D':
        score1 = score1**2
    elif bonus1 =='T':
        score1 = score1**3
    
    if option1 == '*':
        score1 = score1*2
    elif option1 == '#':
        score1 = score1*(-1)
    
    
    ## num2 
    score2 = ''
    bonus2 = ''
    option2 = ''
    
    if num2[-1] in ['*', '#']:
        score2 = int(num2[:-2])
        bonus2 = num2[-2]
        option2 = num2[-1]
    else :
        score2 = int(num2[:-1])
        bonus2 = num2[-1]
    
    if bonus2 == 'D':
        score2 = score2**2
    elif bonus2 =='T':
        score2 = score2**3
    
    if option2 == '*':
        score2 = score2*2
        score1 = score1*2
    elif option2 == '#':
        score2 = score2*(-1)
    
    ## num3
        
    score3 = ''
    bonus3 = ''
    option3 = ''
    
    if num3[-1] in ['*', '#']:
        score3 = int(num3[:-2])
        bonus3 = num3[-2]
        option3 = num3[-1]
    else :
        score3 = int(num3[:-1])
        bonus3 = num3[-1]
    
    if bonus3 == 'D':
        score3 = score3**2
    elif bonus3 =='T':
        score3 = score3**3
    
    if option3 == '*':
        score3 = score3*2
        score2 = score2*2
    elif option3 == '#':
        score3 = score3*(-1)
    
    answer = score1+score2+score3
    
    return answer

 

 


다른 사람 풀이

def solution(dartResult):
    point = []
    answer = []
    dartResult = dartResult.replace('10','k')
    point = ['10' if i == 'k' else i for i in dartResult]
    print(point)

 

['1', 'S', '2', 'D', '*', '3', 'T']

 

이렇게 하면 리스트에 담겨서 하나씩 빼서 판단 할 수 있다고 한다.

 

 

 

 

 

역시 제일 감이 안오는 문제였다. 

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

1단계 후기  (1) 2024.01.22
28. 가장 많이 받은 선물  (0) 2024.01.22
27. 붕대 감기  (0) 2024.01.22
26. 신고 결과 받기  (1) 2024.01.22
25. 공원 산책  (0) 2024.01.22