728x90
반응형
풀이
function solution(dartResult) {
let check = dartResult.match(/\d{1,2}[SDT][*|#]?/g)
let res=[]
for (let i = 0; i < 3; i++) {
let num=check[i].match(/\d{1,2}/g)
let bonus=check[i].match(/S|D|T/g)
let option=check[i].match(/[*|#]?/g)
if(bonus[0]==='S') num=+num
else if(bonus[0]==='D') num=Math.pow(+num,2)
else if(bonus[0]==='T') num=Math.pow(+num,3)
if(option.includes('*')){
num*=2
if(i!==0){
res[i-1]=res[i-1]*2
}
}
else if(option.includes('#')){
num*=-1
}
res.push(num)
}
return res.reduce((a,b)=>a+b)
}
1. 정규식을 사용해 점수|보너스|옵션 형태로 변수에 저장
dartResult = 1S2D*3T
-> 1S | 2D* | 3T
정규표현식
/\d{1,2}[SDT][*|#]?/g
\d{1,2} -> \d는 숫자를 의미하고 {(1) min,(2) max} 정규표현식 수량, 즉 십의자리 수 까지 고려
[SDT] -> SDT에 해당하는 문자
[*|#]? -> * 또는 # , ?는 (최대 한번 나오거나 아예 없을 때)
String.prototype.match
문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음 괄호 안에 캡처된 결과가 옵니다. 일치하는 것이 없으면 null이 반환됩니다.
정규식에 g 플래그가 포함되어 있으면, 일치는 객체가 아닌 일치하는 하위 문자열을 포함하는 Array를 반환합니다. 캡처된 그룹은 반환되지 않습니다. 일치하는 것이 없으면 null이 반환됩니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/match
String.prototype.match() - JavaScript | MDN
match() 메서드는 문자열이 정규식과 매치되는 부분을 검색합니다.
developer.mozilla.org
?의 차이
? -> 0,1번 발생되는 패턴과 일치시킨다.
let option=check[i].match(/[*|#]?/g)
이 부분에서 option을 log에 찍어보면 배열 형태로 값이 나오는데
[ '', '', '' ]
[ '', '', '*', '' ]
[ '', '', '' ]
match(/[*|#]/g)
?를 빼고 찍어보면 아래처럼 값이 나온다.
null
[ '*' ]
null
의문점(?)
주어진 문자는 check배열에는 [ '1S', '2D*', '3T' ] 이런식으로 값이 담겨있고 각 인덱스의 길이는 [2,3,2]인데
option에서는 [3,4,3]으로 출력이 된다.
예상) 1-> '', S-> '', *이나#이 없기에 '' 그래서 위에처럼 표시되는게 아닌가 싶다.
728x90
반응형
'알고리즘(Algorithm)' 카테고리의 다른 글
프로그래머스 - 크레인 인형뽑기 게임 [JS] (0) | 2023.01.16 |
---|---|
프로그래머스 - 체육복(Greedy) [JS] (0) | 2023.01.13 |
프로그래머스 - 비밀지도 [JS] (0) | 2023.01.10 |
프로그래머스 - 소수 만들기[JS] (0) | 2023.01.09 |
프로그래머스 - 소수 찾기[JS] (0) | 2023.01.08 |