[1차] 다트 게임

hyuri·2023년 9월 29일
0

코딩테스트 연습

목록 보기
48/70

내가 작성한 답

function solution(dartResult) {
    var answer = 0;
    let now = 0, before = 0, save = 0;
    const dartArray = dartResult.match(/(\d+)|[A-Z]+|([*\#]+)/g);
    dartArray.map((value, index) => {
        switch (value){
            case 'S':
                now = Number(now);
                break;
            case 'D':
                now = Math.pow(Number(now),2);
                break;
            case 'T':
                now = Math.pow(Number(now),3);
                break;
            case '#':
                now = Number(now) * (-1);
                break;
            case '*':
                now = now * 2;
                before = before * 2;
                break;
            default:
                save += Number(before);
                before = Number(now);
                now = value;

        }
    });
    answer = now + before + save;
    return answer;
}

다른 답

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);
}

해석

숫자만 따로 빼서 배열을 생각 안해본건 아닌데...
너무 생각을 많이 했나보다...

profile
개발자가 되고 싶은 지망생

0개의 댓글