프로그래머스 Lv1. 다트 게임

용상윤·2021년 5월 6일
0

문제

2018 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/17682


접근

  1. 제시받은 문자열 dartResult 을 리스트로 변경한다. 이 때 숫자 10에 주의한다.

  2. S 는 점수의 1승이다.

  3. D 는 점수의 2승이다.

  4. T 는 점수의 3승이다.

  5. # 은 직전의 점수를 -1 배 한다.

  6. * 은 직전의 점수와 그 직전의 점수를 각각 2배 한 후 더한다. 이 때 직전의 점수가 맨 처음의 점수라면 그 점수만 2배한다.


코드

js

function solution(dartResult) {
    const dart = [];
    for(var i=0; i<dartResult.length; i++){
        //이 코드는 js만 가능
        if( !isNaN(dartResult[i]) && !isNaN(dartResult[i+1]) ){
            dart.push( dartResult[i] + dartResult[i+1] )
            i++;
        }else{
            dart.push( dartResult[i] )
        }
    }
    
    let pointStack = [];
    let numStack = [];
    dart.forEach(x => {
        if(!isNaN(x)){
            numStack.push(Number(x));
        } else if(x == "S"){
            pointStack.push(Math.pow(numStack.pop(), 1))
        } else if(x == "D"){
            pointStack.push(Math.pow(numStack.pop(), 2))
        } else if(x == "T"){
            pointStack.push(Math.pow(numStack.pop(), 3))
        } else if(x == "*") {
            pointStack.push(x)
        } else if(x == "#"){
            pointStack.push(pointStack.pop() * -1)
        }
    })
    //console.log(pointStack);
    
    pointStack.forEach(x => {
        if(x !== "*"){
            numStack.push(x)
        } else {
            if(numStack.length-1 !== undefined){
                numStack[numStack.length-1] = numStack[numStack.length-1] * 2    
            }
            if(numStack.length-2 !== undefined){
                numStack[numStack.length-2] = numStack[numStack.length-2] * 2    
            }
        }
    })
    //let result = numStack.filter(x => typeof(x) == "number")
    return numStack.reduce((a,b) => a+b)
}

python

def solution(dartResult):
    dart = []
    
    for x in dartResult.replace("10", "k") :
        if x == "k" :
            dart.append(10)
        elif x.isdigit() :
            dart.append(int(x))
        else :
            dart.append(x)
    
    print(dart)
    
    temp = []
    
    for i in range(0, len(dart)) :
        if dart[i] == "S" :
            temp.append(dart[i-1] ** 1)
        elif dart[i] == "D" :
            temp.append(dart[i-1] ** 2)
        elif dart[i] == "T" :
            temp.append(dart[i-1] ** 3)
        elif dart[i] == "#" :
            temp[-1] = temp[-1] * (-1)
        elif dart[i] == "*" :
            if len(temp) > 1 :
                temp[-1] = temp[-1] * 2
                temp[-2] = temp[-2] * 2
            else :
                temp[-1] = temp[-1] * 2
        
    return sum(temp)


profile
달리는 중!

0개의 댓글