fullfish 2022. 9. 8. 01:42

코드

function solution(dartResult) {
  let dartResultArr = [...dartResult.match(/(\d*\D*)(\d*\D*)(\d*\D*)/)].slice(1, 4);
  let scoreArr = [];
  for (let i = 0; i < dartResultArr.length; i++) {
    let tempArr = [...dartResultArr[i].match(/(\d*)(\D*)/)].slice(1, 3);
    let area = 0;
    if (tempArr[1].slice(0, 1) === "S") area = 1;
    else if (tempArr[1].slice(0, 1) === "D") area = 2;
    else area = 3;
    scoreArr.push(Math.pow(tempArr[0], area));
    if (tempArr[1].slice(1, 2) === "*") {
      scoreArr[i - 1] *= 2;
      scoreArr[i] *= 2;
    } else if (tempArr[1].slice(1, 2) === "#") {
      scoreArr[i] *= -1;
    }
  }
  return scoreArr.reduce((pre, cur) => pre + cur);
}

 

2번째줄의

dartResult.match(/(\d*\D*)(\d*\D*)(\d*\D*)/)
이 부분을 다른 사람 풀이에서 좋아요 제일 많이 받은 사람것을 보니까
dartResult.match(/\d.?\D/g)
이렇게 썼는데
'1S1S10S#'처럼 하나의 다트에서 4자리의 값을 가진것은 되지않는다
그러므로
dartResult.match(/\d.?\D*/g)로 바꿔주면 될것같다
즉 (\d*\D*)(\d*\D*)(\d*\D*)처럼 캡쳐를 써서 3개쓰지말고 g플래그를 쓰자

그리고 SDT를 if문으로 하기보다 객체로하면 더 좋겠다