[프로그래머스]다트게임

이윤성·2022년 3월 23일
0

문제

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

풀이

  • 조건을 만족시켜주는 코드를 짜면 되겠다고 생각했다.
  • 주의할 조건은 '*'가 처음 게임에 나오는 경우와 2자리수 10이 나오는 경우였다.

코드

  • 두 자리수 점수가 나오는 걸 대비해 'S,D,T'가 나오기 전까지 수를 받고 'S, D, T'를 찾은 후, '*,#'가 있는지 확인하며 코드를 구현했다
def count(score, area, bonus, score_list):
    score = int(score)
    if area == 'D':
        score = score * score
    elif area == 'T':
        score = score * score * score
    
    if bonus == "*":
        if len(score_list) > 0:
            score_list[-1] *= 2
        score *= 2
    elif bonus == "#":
        score *= -1
    
    score_list.append(score)
    return score_list
    
def solution(dartResult):
    answer = 0
    index = 0
    score_list = []
    while index < len(dartResult):
        score = bonus = ''
        while dartResult[index] not in 'SDT':
            score += dartResult[index]
            index += 1
        area = dartResult[index]
        index += 1
        if index < len(dartResult) and dartResult[index] in "*#":
            bonus = dartResult[index]
            index += 1
        score_list = count(score, area, bonus, score_list)
    answer = sum(score_list)
    return answer

추가 사항

  • 하지만 다른 사람들의 풀이를 보니 두 자리수가 10 하나밖에 없는 특징을 살려 10을 'k'와 같이 한 자리수 문자로 치환을 했다. 좋은 방법이라고 생각했지만 두 자리수 숫자가 여러개 나올 경우를 대비해 다른 방법도 찾아봤다.
  • 가장 마음에 드는 방법은 미리 0을 집어 넣은 후, 'S,D,T,*,#'가 아니면 10을 곱하고 새로운 수를 더하는 방법이었다. 예를 들어 새로운 점수가 25이라고 했을 때, 0 -> 20 -> 25가 된다. 이렇게 얼마든지 확장 가능한 코드를 구현할 수 있다.

0개의 댓글

관련 채용 정보