https://programmers.co.kr/learn/courses/30/lessons/17682
가장 풀기 싫어 하는 유형.. 극혐..
if else의 향연
조건을 꼼꼼히 대조해보는 수밖에 없다.
function solution(dartResult) {
//얻을 수 있는 점수는 0점에서 10점
//Single(S) ^^1, Double(D)^^2, Triple(T)^^3 영역
//스타상(*) 바로 전에 얻은 점수를 각 2배, 첫 번째 기회에서도 나올 수 있다./중첩된 스타상(*) 점수는 4배
//아차상(#) 당첨 시 해당 점수는 마이너스, 스타상(*)의 효과는 아차상(#)의 효과와 중첩 : 점수는 -2배
//Single(S), Double(D), Triple(T)은 점수마다 하나씩
//스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.
//점수 0~10
//보너스 SDT
//옵션은 * #
let arrResult = dartResult.split('');
let digit = [];
let bonus = [];
let options = [new Array(),new Array(),new Array()];
for(let i = 0; i < arrResult.length; i++){
let ch = dartResult[i];
if('0' <= ch && ch <= '9'){
if(ch == '1' && dartResult[i+1] == '0'){
i++;
digit.push(10);
} else {
digit.push(parseInt(ch));
}
}else if(ch == 'S' || ch == 'D' || ch =='T'){
if(ch == 'S') bonus.push(1);
if(ch == 'D') bonus.push(2);
if(ch == 'T') bonus.push(3);
}else if(ch == '*'){
options[digit.length - 1].push(ch);
if(1 < digit.length) options[digit.length - 2].push(ch);
}else if(ch == '#'){
options[digit.length - 1].push(ch);
}
}
let result = 0;
for(let i = 0; i < 3; i++){
let preValue = Math.pow(digit[i],bonus[i]);
let multi = 1;
if(0 < options[i].length){
for(let option of options[i]){
if(option === "*") multi *= 2;
else multi *= -1;
}
}
result += preValue * multi;
}
return result;
}
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[1차] 비밀지도 (0) | 2020.09.03 |
---|---|
실패율 (0) | 2020.09.03 |
소수 찾기 (0) | 2020.09.03 |
서울에서 김서방 찾기 (0) | 2020.09.03 |
문자열 다루기 기본 (0) | 2020.09.03 |