티스토리 뷰

안녕하세요 프로그래머스 다트게임 문제 풀이입니다.

 

문제는 아래의 링크를 참고하시면 됩니다!

programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

문제를 간단히 설명하자면

주어진 숫자와 문자로 이루어진 문장을 받고, 적절한 점수의 합계를 출력하는 문제입니다.

 

저는 0 과 10을 어떻게 따로 처리할지, '*' 문자를 처리할 경우 이전의 숫자에 영향을 주는 것을 어떻게 처리할지, 1S*, 3D, 10S처럼 문자의 길이가 가변적이라 split을 어떻게 해야 할지에 대해 초점을 맞추어  코드를 작성했습니다!

 

def solution(dartResult):
    number = 0
    result = []
    for i in dartResult :
        if i in ['S', 'D', 'T', '*', '#']:
            
            print(number)
            if i == 'S':
                continue
            elif i == 'D' :
                number **= 2
            elif i == 'T' :
                number **= 3
            elif i == '*' :
                result[len(result) - 1] *= 2
                number *= 2
            elif i == '#' :
                number *= -1
            
        else:
            if number == 1 and i == '0':
                number = 10
            else :
                result.append(number)
                number = int(i)
            
        
    result.append(number)
    print(result)
    answer = sum(result[1:])
    
    return answer

저는 우선 정규 표현식을 사용하지 않아서 split하기 힘들 것이라 생각해서

한 문자씩 처리했습니다.

숫자가 나오고, 그 다음 문자에 대한 적절한 계산을 해준 후,

다시 숫자가 나오면 이를 결과 리스트에 저장하고, 이전 과정을 반복했습니다.

 

0과 10의 경우에는 10은 '0'을 처리하기 전 '1'을 처리했기 때문에

0과 예외를 두어 계산을 진행하였습니다.

 

마지막 answer에 대한 값은 결과 리스트의 1번째 index부터 끝까지의 합으로 return 해주었습니다.

(result[0] 값은 처음에 무조건 쓰레기 값이 들어가기 때문에 합계에서 빼주었습니다!)

 

이상으로 프로그래머스 다트게임 문제 풀이였습니다.

코드나 설명에 이상 있으면 언제든 댓글로 알려주세요! 감사합니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함