• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

[프로그래머스] 2018 Kakao - 다트게임 (Python)

23 Apr 2021

문제

dartResult를 순회하며

  1. 알파벳 나옴 : 이전에 저장 중이던 숫자를 int화 해서 인덱스에 넣어준다. S, D, T에 따라 값+이전값에 제곱을 해주되, 현재 입력중인 인덱스가 0이면 현재 인덱스에만 해준다.
  2. *이나 # 나옴 : *이면 현재 값+이전 값에 제곱 해주는데, 입력 중인 인덱스가 0이면 현재 인덱스에만 해준다. #이면 현재 인덱스에 마이너스를 넣어준다.
  3. 숫자 나옴 : 어디까지 숫자일지 알 수 없으므로(반드시 1자리가 아니라, 10일 수도 있음) str형태로 저장한다.

result 용으로 [0,0,0] 배열을 갖고 돕니다.

각 예제에 대한 값의 변화는 아래와 같습니다.

1S*2T*3S = [0,0,0] -> [1,0,0] -> [1*2, 0, 0] -> [1*2, 2**3, 0] -> [1*2*2, 2**3*2, 0] -> [1*2*2, 2**3*2, 3] = 4 + 16 + 3 = 23
1D#2S*3S = [0,0,0] -> [1, 0, 0] -> [-1, 0, 0] -> [-1, 2, 0] -> [-2, 4, 0] -> [-2,4,3] = 5
1T2D3D# = [0,0,0] -> [1,0,0] -> [1,4,0] -> [1,4,9] -> [1,4,-9] = -4
1D2S3T* = [1,0,0] -> [1,2,0] -> [1,2,27] -> [1,4,54] = 59

코드


def solution(dartResult):
    answer = 0
    
    res = [0,0,0]
    alpha = ['S', 'D', 'T']
    op = ['*', '#']
    
    idx = 0
    tempNum = ""
    for d in dartResult :
        if d in alpha :
            res[idx] = int(tempNum)
            tempNum = ""
            if d == 'D' :
                res[idx] = res[idx]**2
            elif d == 'T' :
                res[idx] = res[idx]**3
            idx += 1
        elif d in op :
            idx -= 1
            if d == '*' :
                if idx >= 1 :
                    res[idx-1] *= 2
                    res[idx] *= 2
                else :
                    res[idx] *= 2
            elif d == '#' :
                res[idx] *= (-1)
            idx += 1
        else :
            tempNum += d
    
    return res[0]+res[1]+res[2]


problem_solvingpython Share Tweet +1