min
프로그래머스 다트 게임 자바스크립트 본문
<문제>
https://school.programmers.co.kr/learn/courses/30/lessons/17682
<나의 풀이>
//dartResult를 하나씩 돌면서 다음 과정을 수행한다.
//먄약 입력값이 숫자라면 해당 숫자를 배열에 저장한다.
//만약 입력값이 S , D , T중 하나라면 배열에 넣은 값을 S , D , T에 따라서 처리한다.
//만약 입력값이 * , #중 하나라고 하면 배열에 넣은 값 그리고 그 전에 값에 영향을 준다.
//배열의 모든 값들을 더한 값을 리턴한다.
function solution(dartResult) {
var answer = 0;
let dummy = []
let bounce = ["S" , "D" , "T"]
dartResult = dartResult.split(/([*#SDT])/);
for(let i = 0; i < dartResult.length; i++) {
if(!isNaN(dartResult[i]) && dartResult[i] !== "") {
dummy.push(Number(dartResult[i]))
}
else if(bounce.includes(dartResult[i])) {
dummy[dummy.length - 1] = dummy[dummy.length - 1] ** (bounce.indexOf(dartResult[i]) + 1)
}
else if(dartResult[i] === "#") {
dummy[dummy.length - 1] = -1 * dummy[dummy.length - 1]
}
else if(dartResult[i] === "*") {
dummy[dummy.length - 1] = dummy[dummy.length - 1] * 2
dummy[dummy.length - 2] = dummy[dummy.length - 2] * 2
}
}
answer = dummy.reduce((a ,b ) => a + b , 0)
return answer;
}
<다른 사람의 풀이>
function solution(dartResult) {
const bonus = { 'S': 1, 'D': 2, 'T': 3 },
options = { '*': 2, '#': -1, undefined: 1 };
let darts = dartResult.match(/\d.?\D/g);
for (let i = 0; i < darts.length; i++) {
let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
score = Math.pow(split[1], bonus[split[2]]) * options[split[3]];
if (split[3] === '*' && darts[i - 1]) darts[i - 1] *= options['*'];
darts[i] = score;
}
return darts.reduce((a, b) => a + b);
}
<참고자료>
정규표현식
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions
'알고리즘' 카테고리의 다른 글
프로그래머스 숫자 짝꿍 자바스크립트 (0) | 2023.08.24 |
---|---|
프로그래머스 옹알이(2) 자바스크립트 (0) | 2023.08.23 |
프로그래머스 덧칠하기 자바스크립트 (0) | 2023.08.21 |
프로그래머스 카드뭉치 자바스크립트 (0) | 2023.08.20 |
프로그래머스 비밀지도 자바스크립트 (0) | 2023.08.19 |