2018 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/17682
제시받은 문자열 dartResult
을 리스트로 변경한다. 이 때 숫자 10
에 주의한다.
S
는 점수의 1승이다.
D
는 점수의 2승이다.
T
는 점수의 3승이다.
#
은 직전의 점수를 -1 배 한다.
*
은 직전의 점수와 그 직전의 점수를 각각 2배 한 후 더한다. 이 때 직전의 점수가 맨 처음의 점수라면 그 점수만 2배한다.
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)
}
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)