관리 메뉴

Jerry

[프로그래머스] 다트지도 본문

Problem Solving/Algorithm 문제 풀기

[프로그래머스] 다트지도

juicyjerry 2022. 3. 3. 23:41
반응형

첫번째 시도

이런... 보기 좋게 꼬여버려 시간내에 못 품

원인은 parameter인 dartResult에서 숫자와 문자 구별을 하기 위한 판별 로직이 정립이 안 됐다.

풀이 코드에선 isInteger를 사용했는데, 유용해보인다.

 

 

 

 

그 이유는,

 

Number.isInteger() - JavaScript | MDN

The Number.isInteger() method determines whether the passed value is an integer.

developer.mozilla.org

 

 

 

위 메서드는 숫자 이외의 타입이 파라미터로 입력되면, false를 반환한다. 

나처럼 "굳이 indexof 같은 메서드를 사용할 필요가 전혀~ 없다"? 고 지금까지 생각이 든다.

 

 

 

일단 1차 시도는 이렇고, 다음에 한 번 더 풀어보겠다!

 

 

function solution(dartResult) {
    
    /*
        3번의 기회
        각 0~10점
        S / D / T 영역 : 점수 ** 1 / 점수 ** 2 / 점수 ** 3
        
        옵션 
        * : 스타상 - 직전 점수의 각 2배 + 중첩 가능 
        # : 아차상 - 해당 점수 마이너스화 + 스타상과 중첩시 동일하게 적용
        '' : 없는 경우도 존재한다
        
        => 0~10 정수 + S/D/T/''*''/# 문자열 의 총 점수를 반환
    */
    
    let answer = 0;
    let cnt = 0;
    let eachScore = [];
    let numbers = '012345679';
        
    dartResult.split('').reduce((acc, cur, idx) => {
        // console.log('acc :   ' + acc, ',  cur :   ' + cur, ',  idx :   ' + idx, ', \\  ' + Number(cur), typeof Number(cur));
        
        let check = numbers.indexOf(cur);
        console.log(check, typeof check);
    
        if (check < 10 && check !== -1 && check !== NaN) {
            eachScore.push(cur);
            cnt += 1;
        } 
        //else if (typeof cur === 'string' && cur === 'S') {
//             eachScore[idx - 1] =  eachScore[idx - 1] ** 1;
            
//         }  else if (typeof cur === 'string' && cur === 'D') {
//             eachScore[idx - 1] =  eachScore[idx - 1] ** 2;
            
//         } else if (typeof cur === 'string' && cur === 'T') {
//             eachScore[idx - 1] =  eachScore[idx - 1] ** 3;
            
//         } else if (typeof cur === 'string' && cur === '*') {
//             eachScore.map((el, idx) => {
//                 if (idx + 1 <= cnt) el *= 2;
//             })
            
//         } else if (typeof cur === 'string' && cur === '#') {
//             eachScore.map((el, idx) => {
//                 if (idx + 1 <= cnt) el *= (-1);
//             })
//         } 
        

    }, 0);
    

    
}

 

 

 

 

 

 

 

 

참조한 풀이

function solution(dartResult) {
    let arr = [0,0,0];
    let point = -1; 
    for(var i = 0 ; i < dartResult.length; i++) {
        if(Number.isInteger(dartResult[i]*1)) {
            point++;
            if (dartResult[i] == '1' && dartResult[i+1] == '0') {
                arr[point]+=10;
                i++;
                continue;
            }
            else arr[point]+=dartResult[i]*1;
        }
        else {
            if (dartResult[i] == 'D') arr[point]**=2;
            else if (dartResult[i] == 'T') arr[point]**=3;
            else if (dartResult[i] == '*') {
                arr[point]*=2;
                arr[point-1]*=2;
            }
            else if (dartResult[i] == '#') arr[point]*=(-1);
        }
    }
    return arr.reduce((a, b) => a+b);
}

 

 

 

반응형