FrontEnd/프로그래머스

[JS] 다트 게임

728x90

우선 점수를 3번 받기에, 각 점수를 계산할 수 있도록 첫번째,두번째,세번째의 점수를 계산할 리스트를 하나 만들고, 정규표현식을 활용해서 옵션을 뺄 수 있도록 하였다.

 

이후 점수계산을 하기위해서 정규표현식을 한번 더 활용해보았다.

 

점수 , 보너스 , 옵션을 분리해서 저장하였고

 

우선적으로 해당 회차의 점수를 점수 ** 보너스로 계산을 해주었다.

 

옵션이 있는경우에는 옵션에 따라서 동작을 하도록 설정해주었다.

 

 

function solution(dartResult) {
    const dart = dartResult.match(/[0-9]+[SDT][*#]?/g);
    const ret = [0,0,0]
    const bonusList = {
        'S' : 1,
        'D' : 2,
        'T' : 3,
    }
    dart.forEach( (scoreInfo,idx) => {
        const score = scoreInfo.match(/[0-9]+/g)[0]
        const bonus = scoreInfo.match(/[SDT]/g)[0]
        const opt = scoreInfo.match(/[*#]/g)
        ret[idx] = score ** bonusList[bonus]
        if (opt) {
            if (opt[0]==="*") ret[idx] *=2
            if (opt[0]==="*" && idx>0) ret[idx-1] *=2
            if (opt[0]==="#") ret[idx] *= -1
        }
    })
       
    
    return ret.reduce((a,c) => a+c , 0);
}

 

 

나름 가독성 좋게? 잘 짠거같다. 다른사람들의 코드를 보니 정규표현식을 조금 더 공부하면 좋을꺼 같단 생각을 하게 된 문제였다...

728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 하샤드 수  (0) 2023.05.02
[JS] 소수만들기  (0) 2023.05.02
[JS] 완주하지 못한 선수  (0) 2023.04.28
[JS] K번째 수  (0) 2023.04.27
[JS] 모의고사  (0) 2023.04.25