코딩 테스트/프로그래머스 level1

다트 게임

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문으로 하기보다 객체로하면 더 좋겠다

'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글

[1차] 비밀지도  (0) 2022.09.08
모의고사  (0) 2022.09.08
크레인 인형뽑기 게임  (0) 2022.09.08
성격 유형 검사하기  (0) 2022.09.08
3진법 뒤집기  (0) 2022.09.08