akjfal

[Programmers]다트게임 본문

알고리즘/programmers

[Programmers]다트게임

akjfal 2021. 7. 4. 12:19
// 3번
// 0~10
// S D T ^1 ^2 ^3
// * 해당점수와 이전 점수를 각 2배
// # 해당점수는 마이너스
// *가 맨처음 나올시 *의 점수만 2배
// 다른 스타상과 중첩 가능
// *#가 중첩시 2배 마이너스

function solution(dartResult) {
    var answer = 0;
    let idx = 0;
    let arr = dartResult.split(/[0-9(10)]/).filter(s =>  s !== "");
    let arr2 = dartResult.split(/[^0-9(10)]/).filter(s =>  s !== "");
    let arr3 = dartResult.match(/(\d{1,})(S|D|T)(\*|#)?/g);
    let arr4 = arr3[0].match(/(^\d{1,})(S|D|T)(\*|#)?/);
    console.log(arr3);
    console.log(arr4);
    arr.forEach((value, idx) => {
        for(let i = 0; i < value.length; i++){
            let num = parseInt(arr2[idx]);
            let s = value.charAt(i);
            if(s === "*"){
                if(idx === 0){
                    arr2[idx] = star(num);  
                }else{
                    arr2[idx] = star(num);  
                    arr2[idx-1] = star(parseInt(arr2[idx-1]));  
                }
            }else if(s === "#"){
                arr2[idx] = sharp(num);
            }else{
                arr2[idx] = involution(num, s);
            }
        }
    })
    // console.log(arr2);
    answer = arr2.reduce((acc, v, idx) => acc+v);
    return answer;
}

function involution(num, I){
    if(I === "S"){
        return num;
    }else if(I == "D"){
        return Math.pow(num, 2);
    }else{
        return Math.pow(num, 3);
    }
}

function star(num, idx){
    return num*2;
}

function sharp(num){
    return -num;
}

이 문제도 정규식을 공부하는데 정말 좋은 문제다

1. match()개념

2. {1, }개념

3. ?개념

등의 정확한 활용을 익혔다.

'알고리즘 > programmers' 카테고리의 다른 글

[Programmers]비밀지도  (0) 2021.07.04
[Programmers] 신규 아이디 추천  (0) 2021.07.03
[Programmers] [3차] n진수 게임  (0) 2021.07.03
[Programmers] 짝지어 제거하기  (0) 2021.06.24
[Programmers] 올바른 괄호  (0) 2021.06.24
Comments