다트 게임

hapwoo·2022년 8월 11일
0

Coding test

목록 보기
4/18

https://school.programmers.co.kr/learn/courses/30/lessons/17682

function solution(dartResult) {
    const dart = dartResult.split("");
    let answer = [];
    let numberPointer = 0;
    let signPointer = 1;
    let currentNumber;

    while (signPointer < dartResult.length) {
        if (dart[numberPointer] == "1" && dart[signPointer] == "0") {
          currentNumber = 10;
          signPointer += 1;
        } else {
            currentNumber = Number(dart[numberPointer]);
        }    
        while (signPointer < dartResult.length && isNaN(dart[signPointer])) {
            const sign = dart[signPointer];
            if (sign === "S") {
                currentNumber = currentNumber;
            } else if (sign === "D") {
                currentNumber = currentNumber ** 2;
            } else if (sign === "T") {
                currentNumber = currentNumber ** 3;
            } else if (sign === "*") {
                currentNumber *= 2;
                if (answer.length != 0) {
                    answer[answer.length - 1] *= 2;
                }
            } else if (sign === "#") {
                currentNumber *= -1;
            }
            signPointer += 1;
        }   
        answer.push(currentNumber);
        numberPointer = signPointer;
        signPointer += 1;
    }
    return answer.reduce((p, c)=>p+c);
}
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개의 댓글