https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript
오우... 약간 이걸 이렇게밖에 못하나? 라는 생각을 하며 코딩한 문제..
역시나 정규식을 잘 썼어야했는데 아직 정규식 활용도 어린이 수준...
내 코드랑 워너비 코드풀이랑 같이 올려야지
🍋 내 풀이
function solution(dartResult) {
var bonus = {"S":1, "D":2, "T":3};
var options = {"*":2, "#":-1};
var nums = [];
for(var i=0; i<dartResult.length; i++){
var char = dartResult[i];
if(/[0-9]/.test(char)){
if(/[0-9]/.test(dartResult[i+1])){
nums.push(Number(String(char) + String(dartResult[i+1])));
}else if(/[0-9]/.test(dartResult[i-1])){
continue;
}else{
nums.push(char);
}
}else if(/[A-Z]/.test(char)){
nums[nums.length-1] = Math.pow(nums[nums.length-1], bonus[char]);
}else{
if(nums.length > 1 && char == "*"){
nums[nums.length-2] = nums[nums.length-2] * 2
}
nums[nums.length-1] = nums[nums.length-1] * options[char]
}
}
return nums.reduce((acc, val) => {return acc + val});
}
🍋 워너비 풀이
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);
}
정규식 활용을 진짜 킹 갓 잘하셨다
따로 공부를 해야겠따... 정규식... 쌉고수가 되겠어
728x90
반응형