티스토리 뷰

728x90
반응형

 

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

 

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

 

programmers.co.kr

 

 


 

 

<나의 풀이>

def solution(dartResult):
    # < 공백이 있는 문자열일 경우를 대비해 공백 제거해줌 >
    # (ex : dartResult = "1 S 2 D * 3 T *")
    dartResult = ''.join(dartResult.split(' '))

    # < 필요한 변수 선언 >
    answer = 0
    lst = [dartResult[0]] # 첫번째 숫자는 미리 넣어 줌
    index = 0
    prev = 0

    # < 숫자를 기준으로 나누는 코드 >
    for i in range(1, len(dartResult)):

        # i가 숫자가 아니면, lst[index]에 dartResult[i] 값 추가
        if dartResult[i].isdigit() == False:
            lst[index] += dartResult[i]
        
        # i가 숫자일 때
        else:
            # dartResult[i-1] 값도 숫자일 때 (숫자 10일 때 해당)
            # (이미 '1'에서 요소를 만들어 추가되었다면, 따로 요소 추가 없이 '0'도 넣어줌)
            if dartResult[i-1].isdigit():
                lst[index] += dartResult[i]
            
            # 리스트에 새롭게 요소를 추가함 (숫자 0~9일 때 해당)
            else:
                lst.append(dartResult[i])
                index += 1

    # < 점수계산용 코드 >
    for i in range(len(lst)):

        # 숫자가 10인 경우
        if lst[i][1].isdigit():
            temp = int(lst[i][:2])
            n = 2
        
        # 숫자가 0~9인 경우
        else:
            temp = int(lst[i][0])
            n = 1

        for j in range(n, len(lst[i])):
            if lst[i][j] == 'S':
                temp = temp ** 1
            elif lst[i][j] == 'D':
                temp = temp ** 2
            elif lst[i][j] == 'T':
                temp = temp ** 3
            elif lst[i][j] == '*':
                temp = temp * 2
                if i != 0:
                    answer += prev
            elif lst[i][j] == '#':
                temp *= -1

        prev = temp
        answer += temp
    return answer

 

정규표현식으로 풀다가 자꾸 막혀서

결국엔 직관적으로 푼 문제😢

 

 

 

<다른 사람의 풀이>

import re


def solution(dartResult):
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    dart = p.findall(dartResult)
    for i in range(len(dart)):
        if dart[i][2] == '*' and i > 0:
            dart[i-1] *= 2
        dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]

    answer = sum(dart)
    return answer
    
    
# <배운점> 
# => 정규표현식으로 코드를 짠 점

 

728x90
반응형
댓글