연습/프로그래머스

[프로그래머스/JS] [1차] 다트 게임

지이구 2022. 4. 25. 19:27

 

 

https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

 

 

오우... 약간 이걸 이렇게밖에 못하나? 라는 생각을 하며 코딩한 문제..

역시나 정규식을 잘 썼어야했는데 아직 정규식 활용도 어린이 수준...

 

내 코드랑 워너비 코드풀이랑 같이 올려야지

 

 

 

 

 

🍋 내 풀이

 

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
반응형