1 분 소요

문제 링크

풀이

def solution(dartResult):
    score = ''
    bonus = {'S': 1, 'D': 2, 'T': 3}
    result = []
    for dart in dartResult:
        if dart.isdigit():
            score += dart
        elif dart in bonus:
            result.append(int(score) ** bonus[dart])
            score = ''
        elif dart == "#":
            result[-1] = result[-1] * (-1)
        elif dart == '*':
            result[-1] = result[-1] * (2)
            if len(result) >=2:
                result[-2] = result[-2] * (2)
                
    return sum(result)

다른 풀이

def solution(dartResult):
    
    result = []  # 각 던질 다트의 결과를 저장하는 리스트
    
    rule = {
        "S" : 1,  # Single 점수는 제곱하지 않음
        "D" : 2,  # Double 점수는 제곱
        "T" : 3,  # Triple 점수는 세제곱
    }
    
    score = ""  # 현재 읽고 있는 숫자를 저장하는 변수
    
    for i in dartResult:
        
        # 현재 문자가 숫자인 경우, 현재 숫자를 계속 추가
        if i.isdigit():
            score += i
        
        # 현재 문자가 보너스(S, D, T)인 경우, 점수를 계산하고 리스트에 추가
        elif i in rule:
            result.append(int(score) ** rule[i])
            score = ""  # 현재 숫자 초기화
        
        # 현재 문자가 '#'인 경우, 마지막으로 추가한 점수를 음수로 만듦
        elif i == "#":
            result[-1] *= -1
        
        # 현재 문자가 '*'인 경우, 마지막으로 추가한 점수를 2배로 만듦
        elif i == "*":
            result[-1] *= 2
            
            # 만약 두 번째로 추가한 점수가 존재하면 두 번째 점수도 2배로 만듦
            if len(result) >= 2:
                result[-2] *= 2 
            
    # result의 모든 원소들의 합을 반환
    return sum(result)
출처: https://1ets-just-do-it.tistory.com/82 [파이썬은 신이야🔥🔥🔥:티스토리]

풀이 해석

보너스를 dict 타입에 저장하였고 문자를 읽으면서 보너스가 나왔을시에 초기화를 하며 리스트에 적절히 저장하며 데이터를 이용하였다.

배울 점

  • dict 타입의 활용
  • list에 적절히 저장하여 보너스와 옵션으로 데이터 변환

댓글남기기