min

프로그래머스 다트 게임 자바스크립트 본문

알고리즘

프로그래머스 다트 게임 자바스크립트

minprogramming 2023. 8. 22. 07:44

<문제>

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<나의 풀이>

//dartResult를 하나씩 돌면서 다음 과정을 수행한다.
//먄약 입력값이 숫자라면 해당 숫자를 배열에 저장한다.
//만약 입력값이 S , D , T중 하나라면 배열에 넣은 값을 S , D , T에 따라서 처리한다.
//만약 입력값이 * , #중 하나라고 하면 배열에 넣은 값 그리고 그 전에 값에 영향을 준다.
//배열의 모든 값들을 더한 값을 리턴한다.

function solution(dartResult) {
    var answer = 0;
    let dummy = []
    let bounce = ["S" , "D" , "T"]
    dartResult = dartResult.split(/([*#SDT])/);
    
    for(let i = 0; i < dartResult.length; i++) {
        if(!isNaN(dartResult[i]) && dartResult[i] !== "") {
            dummy.push(Number(dartResult[i]))
        }
        
        else if(bounce.includes(dartResult[i])) {
            dummy[dummy.length - 1] = dummy[dummy.length - 1] ** (bounce.indexOf(dartResult[i]) + 1)
        }
        
        else if(dartResult[i] === "#") {
            dummy[dummy.length - 1] = -1 * dummy[dummy.length - 1]
        }
        
        else if(dartResult[i] === "*") {
            dummy[dummy.length - 1] = dummy[dummy.length - 1] * 2
            dummy[dummy.length - 2] = dummy[dummy.length - 2] * 2
        }
    }
    
    answer = dummy.reduce((a ,b ) => a + b , 0)
    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);
}

<참고자료>

정규표현식

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions

 

정규 표현식 - JavaScript | MDN

정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec() (en-US)와 test() 메서드를 사용할 수 있습니다. String의 match()

developer.mozilla.org