[프로그래머스 level1] 다트 게임_2018 카카오 채용

김예지·2021년 10월 14일
1

문제

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


문제 풀이

코드

function solution(dartResult) {
    let first=0;
    let second=0;
    let third=0;
    let tmp=1;
    
    //첫번째 숫자(숫자가 10인 경우도 고려해주기)
    if(!isNaN(Number(dartResult[1]))){
        first+=Number(dartResult[0]+dartResult[1]);
        tmp+=1;
    }
    else first+=Number(dartResult[0]);
    for(let i=tmp; i<dartResult.length; i++){
        if(!isNaN(Number(dartResult[i]))){
            tmp=i;
            break;
        }
        //else if(dartResult[i]==='S') first=first;
        else if(dartResult[i]==='D') first=Math.pow(first, 2);
        else if(dartResult[i]==='T') first=Math.pow(first, 3);
        else if(dartResult[i]==='*') first*=2;
        else if(dartResult[i]==='#') first*=-1;
    }
    
    //두번째 숫자 
    if(!isNaN(Number(dartResult[tmp+1]))){
        second+=Number(dartResult[tmp]+dartResult[tmp+1]);
        tmp+=1;
    }
    else second+=Number(dartResult[tmp]);
    for(let i=tmp+1; i<dartResult.length; i++){
        if(!isNaN(Number(dartResult[i]))){
            tmp=i;
            break;
        }
        //else if(dartResult[i]==='S') first=first;
        else if(dartResult[i]==='D') second=Math.pow(second, 2);
        else if(dartResult[i]==='T') second=Math.pow(second, 3);
        else if(dartResult[i]==='*'){
            first*=2;
            second*=2;
        }
        else if(dartResult[i]==='#') second*=-1;
    }
    
    //세번째 숫자
    if(!isNaN(Number(dartResult[tmp+1]))){
        third+=Number(dartResult[tmp]+dartResult[tmp+1]);
        tmp+=1;
    }
    else third+=Number(dartResult[tmp]);
    for(let i=tmp+1; i<dartResult.length; i++){
        if(!isNaN(Number(dartResult[i]))){
            tmp=i;
            break;
        }
        //else if(dartResult[i]==='S') first=first;
        else if(dartResult[i]==='D') third=Math.pow(third, 2);
        else if(dartResult[i]==='T') third=Math.pow(third, 3);
        else if(dartResult[i]==='*'){
            second*=2;
            third*=2;
        }
        else if(dartResult[i]==='#') third*=-1;
    }
    return first+second+third; 
}

정말 내가 할 수 있는 선에서, 조건 하나씩 줘가면서 풀었다. 결과는 정답! 내힘으로 푼 문제는 정말 기분 좋다😙 첨에 테케 두개가 틀리게 나와서 보니까 내가 제대로 예외처리 안해준 부분이 있어서 생긴 문제였다.
문제 풀이가 길어지더라도, 일단 풀리면 된다. (시간 복잡도 너무 커지지 않는 선에서!)
오늘 배운점: 코드가 길어진다고 겁먹지 말자. 시간복잡도가 길어지지 않는선에서, 코드의 가독성이 나쁘지 않은 선에서, 문제를 풀 수 있다면 코드가 길어지는 것은 괜찮다. 지금 단계에서는 코드 길이보다 일단 문제 풀이에 신경쓰자!

*정규표현식으로 풀어보기

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

1개의 댓글

comment-user-thumbnail
2021년 10월 26일

10/26

답글 달기