728x90
입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
- 점수는 0에서 10 사이의 정수이다.
- 보너스는 S, D, T 중 하나이다.
- 옵선은 *이나 # 중 하나이며, 없을 수도 있다.
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
입출력 예제
예제dartResultanswer설명
1 | 1S2D*3T | 37 | 11 * 2 + 22 * 2 + 33 |
2 | 1D2S#10S | 9 | 12 + 21 * (-1) + 101 |
3 | 1D2S0T | 3 | 12 + 21 + 03 |
4 | 1S*2T*3S | 23 | 11 * 2 * 2 + 23 * 2 + 31 |
5 | 1D#2S*3S | 5 | 12 * (-1) * 2 + 21 * 2 + 31 |
6 | 1T2D3D# | -4 | 13 + 22 + 32 * (-1) |
7 | 1D2S3T* | 59 | 12 + 21 * 2 + 33 * 2 |
function solution(dartResult) {
var answer = 0;
const dart = dartResult.match(/[0-9]*\B[A-Z]\W?/g);
const price = [];
dart.forEach((_dart,index)=>{
const score = _dart.match(/[0-9]*/)[0];
const square = _dart.match(/[A-Z]/)[0];
const _prize = (_dart.match(/\W/)?? [])[0];
let tempScore = setScore(score,square);
switch(_prize){
case "*":
if(index == 0){
tempScore*=2;
}else{
price[index-1]*=2; tempScore*=2;
}
break;
case "#":
tempScore*=-1;
break;
}
price.push(tempScore);
});
price.forEach(value=>{
answer+=value;
});
return answer;
}
function setScore(score,square){
let answer = score;
switch(square){
case "S" : answer = score**1; break;
case "D" : answer = score**2; break;
case "T" : answer = score**3; break;
}
return answer;
}
리듀서를 쓰면 좋겠지만 어떻게 쓰는지 잘 몰라서 forEach로 반복해벌임...
728x90
반응형
'공부 > 알고리즘' 카테고리의 다른 글
[카카오 2023 코딩테스트] 택배 배달과 수거하기_java (0) | 2023.10.31 |
---|---|
[프로그래머스] 실패율 _javascript (0) | 2022.09.27 |
[프로그래머스] 체육복 _ javascript (0) | 2022.09.27 |
[프로그래머스] 완주하지 못한 선수 _ javascript (0) | 2022.09.26 |
[프로그래머스] 크레인 인형뽑기 _ javascript (1) | 2022.09.26 |