코딩 테스트/프로그래머스

Lv1. [1차] 다트 게임

  • -
728x90
반응형

문제 보기 :  [1차] 다트 게임

 

프로그래머스

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

programmers.co.kr

 


문제

  • 정답률 : 59%


작성 코드

def solution(dartResult):
    answer = 0 ; k = []
    a = 0
    num = [str(i) for i in range(11)]
    for i in range(len(dartResult)):
        if dartResult[i]=="S":
            if dartResult[i-1]=='0':
                if i>=2 and dartResult[i-2]=='1':
                    a = 10
                else:
                    a = 0
            else:
                a = int(dartResult[i-1])
            if i+1 <= len(dartResult)-1:
                if dartResult[i+1] == "*":
                    if k != []:
                        k[-1] = k[-1]*2
                    a = (a*2)
                elif dartResult[i+1] == "#":
                    a = (a*(-1))
            k.append(a)

        elif dartResult[i]=="D":
            if dartResult[i-1]=='0':
                if i>=2 and dartResult[i-2] in num:
                    a = 10
                else:
                    a = 0
            else:
                a = int(dartResult[i-1])
            if i+1 <= len(dartResult)-1:
                if dartResult[i+1] == "*":
                    if k != []:
                        k[-1] = k[-1]*2
                    a = ((a**2)*2)
                elif dartResult[i+1] == "#":
                    a = ((a**2)*(-1))
                else:
                    a = a**2
            else:
                a = a**2
            k.append(a)

        elif dartResult[i]=="T":
            if dartResult[i-1]=='0':
                if i>=2 and dartResult[i-2] in num:
                    a = 10
                else:
                    a = 0
            else:
                a = int(dartResult[i-1])
            if i+1 <= len(dartResult)-1:
                if dartResult[i+1] == "*":
                    if k != []:
                        k[-1] = k[-1]*2
                    a = ((a**3)*2)
                elif dartResult[i+1] == "#":
                    a = ((a**3)*(-1))
                else:
                    a = a**3
            else:
                a = a**3
            k.append(a)
    return sum(k)

풀이

문자열을 split해서 계산식을 세울까 했는데 숫자가 한자리수만 있는게 아니라 S, D, T 기준으로 if문을 나누어 작성했다.

S, D, T 전에는 항상 숫자가 나오는데 그 수가 0이면 10인지, 0인지 확인 후

S = single이면 단순 더하기, D = double로 제곱, T = Triple이면 세제곱을 한다.

그리고 S, D, T 뒤에 나오는 기호인 *, # 인 경우도 고려해야 하는데, 

1) * 인 경우

  • 앞서 나온 숫자(a, a**2, a**3 중 하나겠지??) 를 두 배
  • 자신도 S, D, T에 맞게 계산하고 두 배

2) # 인 경우

  • 자신도 S, D, T에 맞게 계산하고 -1배

 

여기에선 [*인 경우 - 앞서 나온 숫자 처리] 과정을 해결하기 위해 리스트를 사용했다.

효율성 테스트에서 걸릴까 걱정도 했는데, 효율성 테스트는 없었다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 방문 길이  (2) 2024.08.28
Lv2. 스킬트리  (0) 2024.08.26
Lv2. 롤케이크 자르기  (0) 2024.08.23
Lv1. 소수 찾기  (0) 2024.08.08
Lv2. 프로세스  (0) 2024.08.06
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.