본문 바로가기
개발/Algorithm 문제 풀이

[Python] 카카오 2018 채용 - 다트게임

by DenverAlmighty 2020. 8. 17.
반응형

https://programmers.co.kr/learn/courses/30/lessons/17682?language=python3

 

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

 

programmers.co.kr

 

 

풀이

숫자, 문자, 기호를 분리하고 문자열만 찾아서 앞에 숫자 제곱을 해준다

그리고 그 뒤 요소가 기호이면 기호 계산을 해준다.

* 은 이전 점수에도 2배를 해줘야하기 때문에

계산을 마치고 prev에 점수를 저장해뒀다가 *이나오면 prev를 더해준다.

import re
def solution(dartResult):
    ans = 0
    
    tokens =re.split(r'(\D)',dartResult)
    tokens = list(filter(('').__ne__, tokens))

    prev = 0
    num = 0
    for i in range(1, len(tokens)):
        chr = tokens[i]
        if(chr == 'S'):
            num = int(tokens[i-1])
        elif (chr == 'D'):
            num = int(tokens[i-1]) * int(tokens[i-1])
        elif (chr == 'T'):
            num = int(tokens[i-1]) * int(tokens[i-1]) * int(tokens[i-1])
        else : continue
        
        if i < len(tokens) - 1:
            if tokens[i+1] == '*':
                num *= 2
                ans += prev
            elif tokens[i+1] == '#':
                num *= (-1)
        
        ans += num
        prev = num
        num = 0
                
    return ans

 

다른 사람의 풀이

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

 

p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)

#dart = [('1', 'D', ''), ('2', 'S', '#'), ('10', 'S', '')]

 

\d 는 숫자 0~9 를 의미한다

그런데 점수가 한자리 수일 수도 있고, 두자리일 수도 있다. 

10T 였을때

\d 를 사용하면 1을

\d+를 사용하면 10을 리턴할 것이다

 

 

예시)

 

1. /d+

re.findall("\d+","2030년 카카오 블라인드 채용 1차 지원자 99999명")

>> ['2030', '1', '99999']

 

2. /d 

re.findall("\d","2030년 카카오 블라인드 채용 1차 지원자 99999명")

>> ['2', '0', '3', '0', '1', '9', '9', '9', '9', '9']

 

 

 

 

? : 앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용)

 

 

 

나머지 공부

정규표현식

728x90
반응형