[프로그래머스 Lv1] [1차] 다트게임 (파이썬)

Jewon Joel Park·2022년 6월 8일
0

Programmers-solution

목록 보기
13/34

문제 링크


문제 설명

0 ~ 10점의 점수와 각각 존재하는 싱글/더블/트리플, 직전 2번의 점수를 두배로 만들어주는 스타상 / 직전 한개 점수를 음수로 바꾸는 아차상이 존재할 때, 주어진 문자열을 점수로 환산하는 함수 작성


풀이 코드

def solution(dartResult):
    score_board = []
    dartResult = dartResult.replace("10", "x")
    for dart in dartResult:
        if dart.isdecimal():
            score_board.append(int(dart))
        elif dart == "x":
            score_board.append(10)
        elif dart == "S":
            continue
        elif dart == "D":
            score_board[-1] = score_board[-1] ** 2
        elif dart == "T":
            score_board[-1] = score_board[-1] ** 3
        elif dart == "#":
            score_board[-1] = score_board[-1] * -1
        elif dart == "*":
            if len(score_board) > 1:
                score_board[-1] = score_board[-1] * 2
                score_board[-2] = score_board[-2] * 2
            else:
                score_board[-1] = score_board[-1] * 2
    return sum(score_board)

코드 설명

  1. 문제 입력과 제한조건이 단순하고, 요구사항이 간단하면서도 수가 많기 때문에 그리디하게 풀기로 결정
  2. 각 회차의 점수를 담을 score_board 배열을 생성한 뒤, 0과 1로 구분될 수 있는 문자 10x로 치환
  3. 이후 주어진 문자열을 순회하며 십진수일 경우 정수로 치환, 또는 x일 경우 정수로 변환하여 score_board에 저장
  4. 문자열 "S", "D", "T"의 각 조건에 맞게 가장 마지막에 저장된 점수를 변환하여 저장
  5. "*"와 "#"는 중복될 수 있다는 조건이 있다는걸 생각하며 각 조건에 맞게 구현
  6. 최종 점수를 반환해야하므로 score_board 배열 원소의 합을 return
profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글