Link
문제
풀이
(1)
function solution(dartResult) {
const regex = /(\d+)([SDT])([*#]?)/g;
const scores = [];
let match;
// 정규표현식을 이용하여 각 기회의 결과를 추출
while ((match = regex.exec(dartResult)) !== null) {
let [_, scoreStr, bonus, option] = match;
let score = parseInt(scoreStr);
// 보너스에 따라 점수 제곱 적용 (S:1제곱, D:2제곱, T:3제곱)
switch (bonus) {
case 'S':
score = Math.pow(score, 1);
break;
case 'D':
score = Math.pow(score, 2);
break;
case 'T':
score = Math.pow(score, 3);
break;
}
// 옵션 처리
if (option === '*') {
score *= 2;
if (scores.length > 0) {
// 바로 이전 점수도 2배로
scores[scores.length - 1] *= 2;
}
} else if (option === '#') {
score *= -1;
}
scores.push(score);
}
// 총합 반환
return scores.reduce((acc, cur) => acc + cur, 0);
}
(2)
function solution(dart) {
const numStack = [];
const numArray = dart.replace(/[^0-9]/g, " ").split(" ").filter(v => v);
const strArray = dart.replace(/[0-9]/g, "").split("").filter(v => v.trim());
while (numArray.length) {
let num = numArray.shift();
let str = strArray.shift();
num = num ** {S: 1, D: 2, T: 3}[str];
if (["*", "#"].includes(strArray[0])) {
str = strArray.shift();
num *= "*" == str ? 2 : -1;
if ("*" == str) {
numStack[numStack.length-1] *= 2;
}
}
numStack.push(num);
}
return numStack.reduce((acc, v) => acc + v, 0);
}
'알고리즘 > 문제' 카테고리의 다른 글
[프로그래머스 | Lv. 1 | JavaScript] 문자열 나누기 (0) | 2025.02.18 |
---|---|
[프로그래머스 | Lv. 1 | JavaScript] 로또의 최고 순위와 최저 순위 (0) | 2025.02.17 |
[프로그래머스 | Lv. 1 | JavaScript] 옹알이 (2) (1) | 2025.02.13 |
[프로그래머스 | Lv. 1 | JavaScript] 실패율 (0) | 2025.02.12 |
[프로그래머스 | Lv. 1 | JavaScript] 덧칠하기 (0) | 2025.02.11 |
※ 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.