[Programmers] 다트 게임 (Python)

Mino·2021년 9월 29일
0

Programmers

목록 보기
2/8
post-thumbnail

문제

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



접근 방식

  1. 숫자가 들어오면 임시변수 temp에 숫자를 저장
  2. S, D, T가 들어오면 temp에 연산 후 score 리스트에 append
  3. *, #가 들어오면 score 리스트의 요소에 직접 연산
  4. sum 함수를 이용해 score 리스트의 합 계산



초기 코드

def solution(dartResult):
    score = []
    for i in dartResult:
        if i.isdigit():
            temp = int(i)
        elif i == 'S':
            score.append(temp)
        elif i == 'D':
            score.append(temp ** 2)
        elif i == 'T':
            score.append(temp ** 3)
        elif i == '*':
            if len(score) > 1:
                score[-2] *= 2
                score[-1] *= 2
            else:
                score[-1] *= 2
        elif i == '#':
            score[-1] *= (-1)
    print(score)
    return sum(score)



문제점

0~9점까지는 문제 없이 출력되지만, 10점일 경우 i의 값이 10이 아닌 1과 0으로 반복문이 실행.

-> 10을 replace 함수를 이용하여 A로 치환 후 연산



제출 코드

def solution(dartResult):
    score = []
    dartResult = dartResult.replace('10', 'A')
    for i in dartResult:
        if i.isdigit():
            temp = int(i)
        elif i == 'A':
            temp = 10
        elif i == 'S':
            score.append(temp)
        elif i == 'D':
            score.append(temp ** 2)
        elif i == 'T':
            score.append(temp ** 3)
        elif i == '*':
            if len(score) > 1:
                score[-2] *= 2
                score[-1] *= 2
            else:
                score[-1] *= 2
        elif i == '#':
            score[-1] *= (-1)
    return sum(score)



정제 후 최종 코드

def solution(dartResult):
    score = []
    dartResult = dartResult.replace('10', 'A')
    dart = {'S': 1, 'D': 2, 'T': 3}
    option = {'*': 2, '#': -1}

    for i in dartResult:
        if i.isdigit() or i == 'A':
            temp = 10 if i == 'A' else int(i)
        elif i in dart:
            score.append(temp ** dart[i])
        elif i in option:
            if len(score) > 1 and option[i] == '*':
                score[-2] *= option[i]
                score[-1] *= option[i]
            else:
                score[-1] *= option[i]
    return sum(score)
profile
코린이

0개의 댓글