[프로그래머스] LEVEL1 다트 게임 (Python)

Loopy·2021년 6월 30일
2

프로그래머스

목록 보기
2/32
post-thumbnail

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


🧐 문제 설명


😍 나의 풀이

처음에는 다트 3차례의 시도에 대한 점수를 구분하려고 '[점수][보너스][옵션]'이었기 때문에 잘라서 리스트에 다시 저장하는 방법을 생각했지만 반복문이 많이 나오고 복잡할 것 같았다.

그래서 결국 3차례 시도에 대한 3번의 점수는 숫자로 구분될 것이기 때문에 isdigit()으로 숫자인지를 판별해서 숫자만을 저장하는 빈 스택을 만들어주었다. 그리고 문자를 만나는 경우 보너스, 옵션에 해당하는 점수 처리를 해서 각 점수를 score 리스트에 저장했다. 그 후 2번째, 3번째 점수를 다시 처리해주기 위해서 stack을 비어주어야 한다.

발생한 한 가지 문제점은 들어오는 점수가 0~10까지의 정수이기 때문에 10점의 경우는 스택에 '1', '0'으로 따로 들어와서 이것을 '10'으로 처리할 수가 없었다. 그래서 반복문에서 숫자가 들어오기만 하면 일단 스택에 넣어두고 들어온 점수가 10일 경우를 감안해서 stack의 첫 번째 요소부터 끝까지를 가져오기 위해 리스트 stack[0:]을 문자열로 조인했다.

def solution(dartResult):
    stack = []  #정제되지 않은 점수 값을 임시로 저장
    score = []  #3번의 시도에 대해 보너스와 옵션이 계산되고나면 시도마다 score 값 저장
    bonus = {'S':1, 'D':2, 'T':3}
    
    for i in dartResult:
        if i.isdigit():
            stack.append(i)
            
        elif i in 'SDT':
                score.append(int(''.join(stack[0:])) ** bonus[i])   # 점수가 10인 경우도 고려해서 join
                stack = []
            
        elif i == '*':
            if len(score) > 1:
                score[-2] *= 2 
            score[-1] *= 2
            
        elif i == '#':
            score[-1] *= -1  

    return sum(score)

👏 다른 사람의 풀이

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

정규 표현식은 봐도 '와..' 하는데 내가 이걸 못 외울 것 같아서 활용할 수 있을 지 모르겠다😣


🥇 Today I Learn

딕셔너리(dictionary)

  • 딕셔너리는 키(key)와 값(value)이 한 쌍이 하나의 대응 관계를 가지고 있는 자료형

  • dictionary = { Key1: Value1, Key2: Value2, Key3: Value3}

  • value에 접근하기 위해서 index가 아니라 key로 접근

  • 키 값에 list, set이 올 수 없고 immutable(불변하는) 타입이 와야함

  • 딕셔너리 값 변경, 추가, 삭제

dict = { 'one' : 0, 'two' : 2 }

dict['one'] = 1	#변경(덮어쓰기)
print(dict)

dict['three'] = 3	#추가
print(dict)

del(dict['one'])	#삭제
print(dict)

#실행 결과
{'one': 1, 'two': 2}
{'one': 1, 'two': 2, 'three': 3}
{'two': 2, 'three': 3}
{'three': 3}
profile
공부 쫌 해!!!😂

0개의 댓글