본문 바로가기
문제 풀이/프로그래머스 (Programmers)

[Python] 프로그래머스 : [1차] 다트 게임

by 희조당 2022. 7. 5.
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 문제 풀이

문자열에 대한 문제이다.

 

빈 문자열에 연산할 내용을 추가해줄 것이다.

숫자일 경우, '+'와 함께 숫자를 추가하는데 연속으로 숫자가 오면 '+'을 빼고 숫자만 추가해준다.

T, D, S는 제곱을 넣어준다.

'*'와 '#'은 무조건 숫자 2칸 뒤에 위치하며 있을 수도 없을 수도 있기 때문에

숫자를 확인할 때 확인해서 추가해준다.

'#'은 단순하게 해당 점수가 '-' 되므로 '-1*'를 곱해주면 되지만

'*'은 앞의 값을 먼저 2배 해주고 지금 점수를 두배 해줘야 해서 flag로 확인해주었다.

 느낀 점

어거지로 eval() 함수 써보려고 구현했다가 2점밖에 받지 못했다..

연습이니까 이렇게해도 상관없지만 실전에서는 항상 가장 효율적인 코드를 사용해야겠다.

 코드

def solution(dartResult):
    result = ''
    flag = False
    for i in range(len(dartResult)):
        if dartResult[i].isdigit():
            if i+2 < len(dartResult):
                if dartResult[i+2] == '#': result += '-1*'
                elif dartResult[i+2] == '*':
                    if i != 0: result += '*2'
                    flag = True
            
            if dartResult[i-1].isdigit(): result += dartResult[i]
            else: result += f'+{dartResult[i]}'
        else: 
            if dartResult[i] == 'T': result += '**3'
            if dartResult[i] == 'D': result += '**2'
            if dartResult[i] == 'S': result += '**1'
            if flag:
                result += '*2'
                flag = False
    return result

댓글