hyunjin

[level 1]다트 게임 본문

알고리즘 연습/프로그래머스

[level 1]다트 게임

_h.j 2020. 7. 20. 12:42
728x90

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

 

 

첫 번째 풀이

#include <string>
#include <cctype>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    int tmp[3] = {0,0,0};
    int level = -1;
    for(int i =0 ; i< dartResult.length() ; i++){
        if(isdigit(dartResult[i])!=0 || dartResult[i]-'0' == 0 ){ // 숫자면
             level++;
             tmp[level] = dartResult[i] -'0';
            if(dartResult[i+1]-'0' == 0){
                i++;
                tmp[level]  = tmp[level]*10 +dartResult[i] -'0';
            }
           
           
        }
        else if(dartResult[i] =='*' ||dartResult[i] =='#' ){
            if(dartResult[i] =='*'){
                tmp[level] *=2;
                if(level == 0 ) continue;
                tmp[level-1] *=2;
            }
            else{
                tmp[level] = tmp[level] * (-1);   
            }
        }
        else {
            if(dartResult[i] == 'D'){
                tmp[level] = tmp[level] *tmp[level] ;
            }
            else if(dartResult[i] == 'T'){
                tmp[level] = tmp[level] *tmp[level]*tmp[level] ;
            }    
        }
      
    }
    for(int i=0; i<3;i++)
        answer += tmp[i];   
    
    return answer;
}

 

두 번째 풀이

#include <string>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    int step[3] = {0,0,0};
    int i = 0,s=0;
    
    while(i< dartResult.length()){
        //숫자 파트
        if(dartResult[i+1] >= '0' && dartResult[i+1]<='9'){
            step[s] = (dartResult[i]-'0')*10 +  dartResult[i+1]-'0';
            i++;
        }
        else  step[s] = dartResult[i]-'0';
        i++;

        //보너스
        if(dartResult[i] == 'D')
            step[s] = step[s]*step[s];
        else if(dartResult[i] == 'T')
            step[s] = step[s]*step[s]*step[s];
        i++;
 
        //옵션에서 
        if(dartResult[i] == '#') {step[s] = step[s]*(-1); i++;}
        else if(dartResult[i] == '*'){
            if(s-1 < 0) step[0]*=2;
            else{
                step[s]*=2;
                step[s-1]*=2;
            }
           
            i++;
        }
        
        s++;
        
    }
    for(int elem : step){
        answer +=elem;
    }
    return answer;
}

첫 번째나 두 번째나 모두 흐름은 같다.

 

isdigit은 0 판별 불가하니 '0','9'와 비교를 통해 숫자인지 확인 했다.

 

 

 

 

 

 

728x90