본문 바로가기

알고리즘/카카오 EASY

다트 게임 (Level 1)

문제

 

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

 

"1S2D*3T"을 [1, 'S', 2, 'D', '*', 3, 'T']와 같이 바꾸는 작업을 하였다. 숫자가 0부터 10까지 있으므로, "10"을 위해 temp에 문자를 더해주는 방식으로 코드를 짰다. 만든 리스트의 이름을 lst로 명명하였다.

 

stack을 사용하여 연산을 하였다.

 

def solution(dartResult):
    lst = []
    temp = ""
    for dart in dartResult:
        if dart.isdigit():
            temp += dart
        else:
            if temp != '': lst.append(int(temp))
            lst.append(dart)
            temp = ""
            
    stack = []
    for l in lst:
        if str(l).isdigit():
            stack.append(l)
        elif l == 'D':
            stack.append((stack.pop())**2)
        elif l == 'T':
            stack.append((stack.pop())**3)
        elif l == '*':
            if len(stack) == 1:
                stack.append((stack.pop())*2)
            else:
                b, a = stack.pop(), stack.pop()
                stack.extend([a*2, b*2])
        elif l == '#':
            stack.append((stack.pop())*(-1))
    
    return sum(stack)

 

과거 내 풀이

오잉... 쏘 큐티...

 

def solution(dartResult):
    answer = [0]*3
    num, alpha, prize = [], [], []
    for i in range(1, len(dartResult)):
        if (dartResult[i-1] == 'S' or dartResult[i-1] == 'D' or dartResult[i-1] == 'T') and (ord('0') <= ord(dartResult[i]) <= ord('9')):
            dartResult = dartResult[:i] + '@' + dartResult[i:]
    if dartResult[-1] != '*' and dartResult[-1] != '#' and dartResult[-1] != '@':
        dartResult += '@'

    tmp = ''
    for dart in dartResult:
        if ord('0') <= ord(dart) <= ord('9'):
            tmp += dart
        elif dart == 'S' or dart == 'D' or dart == 'T':
            num.append(int(tmp))
            tmp = ''
            alpha.append(dart)
        else:
            prize.append(dart)

    for i in range(3):
        if alpha[i] == 'S':
            answer[i] = num[i]**1
        elif alpha[i] == 'D':
            answer[i] = num[i]**2
        elif alpha[i] == 'T':
            answer[i] = num[i]**3

        if prize[i] == '*':
            if i == 0:
                answer[i] *= 2
            else:
                answer[i-1] *= 2
                answer[i] *= 2
        elif prize[i] == '#':
            answer[i] *= (-1)
    return sum(answer)

 

총평

 

옛날에 오랫동안 붙잡고 있었던 문제였던 게 기억이 나서 재도전할 때 살짝 두려웠다. 그러나, 생각보다 금방(약 20분 정도 걸린 것 같다) 풀어서 다행이었다. 

'알고리즘 > 카카오 EASY' 카테고리의 다른 글

방금그곡 (Level 2)  (0) 2022.07.25
압축 (Level 2)  (0) 2022.07.25
비밀지도 (Level 1)  (0) 2022.07.11
캐시 (Level 2)  (0) 2022.07.08
프렌즈4블록 (Level 2)  (0) 2022.07.08