코드
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 |