본문 바로가기

알고리즘

[programmers] 다트 게임

 


코드1 : 10을 다른 숫자나 문자로 치환 후 진행

# solution2(코드2)보다 0.01초 정도 빠르다
def solution1(dartResult):

    bonus = {'S': 1, 'D': 2, 'T': 3}
    options = ['*', '#']
    answer = []

    dartResult = dartResult.replace('10', 't')
    for i in range(len(dartResult)):
        if dartResult[i] in bonus:
            if dartResult[i - 1] == 't':
                answer.append(10 ** bonus[dartResult[i]])
            else:
                answer.append(int(dartResult[i - 1]) ** bonus[dartResult[i]])

        if dartResult[i] in options:
            if dartResult[i] == '*':
                if len(answer) == 1:
                    answer[-1] *= 2
                else:
                    answer[-1] *= 2
                    answer[-2] *= 2
            else:
                answer[-1] *= (-1)

    res = 0
    for ans in answer:
        res += ans

    return res

 

코드2 : 10을 그대로 두고 진행

def solution2(dartResult):

    bonus = {'S': 1, 'D': 2, 'T': 3}
    options = ['*', '#']
    numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    answer = []

    for i in range(len(dartResult)):
        if dartResult[i] in bonus:
            if dartResult[i - 2:i] == '10':
                answer.append(10 ** bonus[dartResult[i]])

            elif dartResult[i-1] in numbers:
                answer.append(int(dartResult[i - 1]) ** bonus[dartResult[i]])

        if dartResult[i] in options:
            if dartResult[i] == '*':
                if len(answer) == 1:
                    answer[-1] *= 2
                else:
                    answer[-1] *= 2
                    answer[-2] *= 2
            else:
                answer[-1] *= (-1)
    print(answer)
    res = 0
    for ans in answer:
        res += ans

    return res

 

주의해야하는 점

1. ** 문제점 : TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

   ** 해결책 : dartResult[i - 1] str이므로 int ** int를 해줘야함

 

2. ** 문제점 : '10'을 '0'으로 바꾸니까 정답이 나오지 않음

   ** 해결책 : 문제를 잘 읽자 -> 점수는 0에서 10 사이의 정수이다.

'알고리즘' 카테고리의 다른 글

[programmers] 뉴스 클러스터링  (0) 2020.08.31
[programmers] 튜플  (0) 2020.08.31
[baekjoon] 14888. 연산자 끼워넣기  (0) 2020.08.19
[baekjoon] 14889. 스타트와 링크  (0) 2020.08.18
[baekjoon] 13458. 시험감독  (0) 2020.08.18