본문 바로가기

코딩테스트/파이썬

프로그래머스 level1 다트 게임

728x90

문제 설명

 

 

변수는 총 세 개로 설정했다. answer는 점수 합계, points는 점수를 저장해놓는 배열, num은 한 번 던질 때 얻은 점수다.

 

for문을 사용하여 dartResult에서 값을 하나씩 빼와서 알파벳인지 확인한다. 알파벳이면 해당 알파벳이 S면 그대로 points에 append하고 D면 제곱을 하여 append하고 T면 세제곱을 하여 append 한다. 마지막으로는 num을 ''으로 초기화한다.

 

dartResult에서 빼온 값이 숫자면 num에 덧붙여준다. 덧붙이는 이유는 한 자리 수만 있는게 아니라 10까지 있으므로 +=을 사용했다.

 

dartResult에서 빼온 값이 알파벳도 아니고 숫자도 아닐 경우에는 해당 값이 *인지 #인지로 나누었다. *일 경우에는 또 두 가지 경우로 나누었는데 points에 값이 하나만 있을 경우와 두 개 이상 있을 경우로 나누었다. #일 경우에는 마지막 원소에 -1을 곱해주었다.

 

마지막으로 points에 저장된 값들을 answer에 더한 후 리턴해줬다.

 

전체 코드

 

def solution(dartResult):
    answer = 0
    points = []
    num = ''
    for i in dartResult:
        if(i.isalpha()):
            if(i == 'S'):
                points.append(int(num))
            elif(i == 'D'):
                points.append(int(num)**2)
            else:
                points.append(int(num)**3)
            num = ''
        elif(i.isdigit()):
            num += i
        else:
            if(i == '*'):
                if(len(points)==1):
                    points[0] *= 2
                else:
                    for i in range(len(points)-2,len(points)):
                        points[i] *= 2
            elif(i == '#'):
                points[-1] *= -1
    for i in points:
        answer += i
    return answer
728x90
반응형