[test]다트게임 - python

joygoround·2020년 5월 8일
0

Coding Test

목록 보기
39/42

my sol.

def solution(dartResult):

    for i in range (2, len(dartResult)):
        if dartResult[i].isdigit(): 
            x = i
            break
    First = dartResult[0: x]

    for i in range (x+2, len(dartResult)):
        if dartResult[i].isdigit(): 
            y = i
            break
    Second = dartResult[x:y]

    Third = dartResult[y:]

    newlist = (First, Second, Third)


    scores = []
    for word in newlist:
        for i in range(1,len(word)):
            if word[i].isdigit() == False:
                sc = int(word[0:i])
                break
        if 'S' in word:
            sc =sc**1
        elif 'D' in word:
            sc =sc**2
        elif 'T' in word:
            sc =sc**3
        scores.append(sc)

    if '*' in First:
        scores[0] = scores[0]*2
    if '#' in First:
        scores[0] = scores[0]*(-1)
    if '*' in Second:
        scores[0] = scores[0]*2
        scores[1] = scores[1]*2
    if '#' in Second:
        scores[1] = scores[1]*(-1)
    if '*' in Third:
        scores[1] = scores[1]*2
        scores[2] = scores[2]*2
    if '#' in Third:
        scores[2] = scores[2]*(-1) 

    return sum(scores)

노가다 코드.

  • 1~3차시에 해당하는 것을 각각 구한다.
    뒤에 반드시 하나의 숫자가아닌 문자가 오고 10점까지 있으니까 인덱스 2부터 검사해서 숫자가 나오면 그 전까지 슬라이스 하는 방식.

  • 각 차시에 해당하는 문자열을 나눠서 점수부분을 구해주고, S,D,T에 따라 제곱해주기.

  • 옵션 사항인 '*'과 '#'구해주기

other sol.

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

정규표현식 활용 !!

profile
roundy

0개의 댓글