IT/Algorithm

프로그래머스) [1차] 다트 게임

프티 2021. 10. 6. 17:43
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript 

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

다트 게임의 계산 로직을 풀어보았다.

 

*의 경우 자신과 뒤에 값에 2를 곱해주어야 해서 가장 나중에 계산하려고 했다.

 

따라서 S, D, T, #의 경우에 계산되는 값을 먼저 계산하였다.

 

이 과정에서 reduce를 사용하여 유일한 두 자리 숫자인 10은 이전 값과 현재 값을 문자열 더하기로 합쳐주었다.

 

그 후에 *을 찾고, 값을 계산하고 splice로 *을 없애주었다.

이 때문에 forEach가 아닌 for문을 사용하였다.

 

마지막으로 reduce로 누적 계산하여 답을 도출했다.

 

나의 풀이

function solution(dartResult) {
    const resultList = [];
    const vonus = ["S", "D", "T"];
    const option = ["*", "#"];
    
    let answer;
    
    dartResult.split("").reduce(function (accValue, curValue) {
        if (vonus.includes(curValue)) {
            if (curValue === "S") {
                resultList.push(parseInt(accValue));
                return accValue = "";
            } else if (curValue === "D") {
                resultList.push(parseInt(accValue) ** 2);
                return accValue = "";
            }
            
            resultList.push(parseInt(accValue) ** 3);
            return accValue = "";
        } else if (option.includes(curValue)) {
            if (curValue === "#") {
                resultList[resultList.length - 1] = -resultList[resultList.length - 1];
                return accValue = "";
            }
            
            resultList.push(curValue);
            return accValue = "";
        }

        return accValue + curValue;
    });

    for (let i = 0; i < resultList.length; i++) {
        if (resultList[i] === "*" && i === 1) {
            resultList[0] = resultList[0] * 2;
            
            resultList.splice(i, 1);
            i -= 1;
        } else if (resultList[i] === "*") {
            resultList[i - 1] = resultList[i - 1] * 2;
            resultList[i - 2] = resultList[i - 2] * 2;
            
            resultList.splice(i, 1);
            i -= 1;
        }
    }

    return answer = resultList.reduce((accValue, curValue) => accValue + curValue);
}
반응형

'IT > Algorithm' 카테고리의 다른 글

프로그래머스) 상호 평가  (0) 2021.10.08
Quick Sort  (0) 2021.10.08
Merge sort  (0) 2021.10.02
프로그래머스) 체육복  (0) 2021.10.01
프로그래머스) 최소 직사각형  (0) 2021.10.01