본문 바로가기
코딩테스트/프로그래머스

[프로그래머스][Lv.1][Python] 다트 게임

by Hwan,. 2022. 9. 25.
728x90
반응형

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 접근 방식

  • S, D, T, *, #을 공백을 포함하여 replace 후 공백으로 split 해주면 서로 분리됨(마지막 공백은 제거)
  • 각 기호에 맞는 점수를 제곱해서 정수로 변경해줌
  • *은 현재와 이전 값에 *2 (해당 범위에 * 이나 다른 기호가 포함될 경우도 고려해서 미리 정수로 변경해줌)
  • #은 0으로 변경 후 현재 값에 -1
  • 정수로 변환된 전체 리스트를 합쳐줌 -> 총점

 

3. 코드

def solution(s):
    for str_tmp in ["S", "D", "T", "*", "#"]:
        s = s.replace(str_tmp, str_tmp + " ") 
    res = [x for x in s.split(" ")][:-1]
    
    for i in range(len(res)):
        x = res[i]
        if x == "*" or x == "#":
            continue
        
        if "S" in x:
            res[i] = int(x.replace("S", ""))
        if "D" in x:
            res[i] = pow(int(x.replace("D", "")), 2)
        if "T" in x:
            res[i] = pow(int(x.replace("T", "")), 3)
            
    for i in range(len(res)):
        if res[i] == "*":
            res[i] = 0
            res[i-1] *= 2
            if i-2 >= 0:
                if res[i-2] != 0:
                    res[i-2] *= 2
                else:
                    res[i-3] *= 2
        if res[i] == "#":
            res[i] = 0
            res[i-1] *= -1
    
    return sum(res)

 

4. 결과

각 과정 출력

728x90
반응형

댓글