반응형

문제 링크

 

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

 

programmers.co.kr

 

풀이 ) 

  문자열을 앞에서부터 한 문자씩 읽는다.

  숫자 3개를 저장할 배열을 만들고 숫자가 나올때마다 인덱스를 늘려 각 배열에 넣는다.

  1이 오는 경우 뒤에 0이 와서 10이 되는 경우가 있기 때문에 뒤에 0이 오는지 확인하고 0이 오면 배열에 10을 저장하고 문자열에서 한 문자만큼 더 이동시킨다.

 

  S D T에 대해서, S가 오는 경우 건너뛰고, D가 오는 경우 제곱, T가 오는 경우 세제곱해준다.

 

  #이 오는 경우 해당 숫자에 -1을 곱하고, 마지막으로 *이 오는 경우 가장 앞에 오는 경우가 아니면 앞 숫자까지 2를 곱해준다.

 

  마지막으로 배열에 저장된 3개의 값을 더해주어 답을 구한다.

#include <string>
#include <iostream>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    int score[3] = {0, };
    int len = dartResult.size();
    int idx_score = -1;
    
    for(int i = 0; i < len; ++i){
        if(dartResult[i] == '1'){
            idx_score++;
            if(dartResult[i+1] == '0'){
                score[idx_score] = 10;
                i++;
            }
            else{
                score[idx_score] = 1;
            }
        }
        else if('0' <= dartResult[i] && dartResult[i] <= '9'){
            idx_score++;
            score[idx_score] = dartResult[i]-'0';
        }
        else if(dartResult[i] == 'S')
            continue;
        else if(dartResult[i] == 'D')
            score[idx_score] *= score[idx_score];
        else if(dartResult[i] == 'T')
            score[idx_score] *= score[idx_score] * score[idx_score];
        else if(dartResult[i] == '#')
            score[idx_score] *= -1;
        else{
            if(idx_score > 0){
                score[idx_score-1] *= 2;
            }
            score[idx_score] *= 2;
        }
    }
    answer = score[0] + score[1] + score[2];
    return answer;
}

 

주의점 )

  • 10이 나오는 경우
반응형

+ Recent posts