티스토리 뷰

문제 링크

 

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

 

programmers.co.kr

 

 

풀이

이 문제를 풀 때 stoi 함수를 몰랐기 때문에 직접 점수를 10의 자리에 해당되면 곱하면서 증가시켜주었기 때문에 코드가 많이 길지만 결국은 비교하면서 스택 자료구조를 사용하면 문제를 쉽게 풀 수 있다.

 

더보기
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    vector<string> numberArray;
    vector<int> number;
    
    // Numbering
    numberArray.push_back(dartResult.substr(0, 1));
    for(int i=1; i<dartResult.length(); i++)
    {
        if(dartResult[i] >= '0' && dartResult[i] <= '9' 
           && !(dartResult[i-1] >= '0'&& dartResult[i-1] <= '9'))
        {
            numberArray.push_back(dartResult.substr(i, 1));
        }
        else
        {
            numberArray.back() += dartResult[i];
        }
    }
    
    for(int i=0, j = 0; i<numberArray.size(); i++, j=0)
    {
        number.push_back(numberArray[i][j++] - '0');
        while(numberArray[i][j] >= '0' && numberArray[i][j] <= '9')
        {
            number[i]*=10;
            number[i]+= numberArray[i][j++] - '0';
        }
        switch(numberArray[i][j++])
        {
            case 'S': ; break; // no operation
            case 'D': number[i]*= number[i]; break;
            case 'T': number[i]*= number[i] * number[i]; break;
        }
        if(numberArray[i].length()-1 == j)
        {
            if(numberArray[i][j] == '*')    // '*'
            {
                number[i]*=2;
                if(i > 0)
                {
                    number[i-1]*=2;
                }
            }
            else if(numberArray[i][j] == '#')    // '#'
            {
                number[i] *= -1;
            }
        }
    }
    
    for(int i=0; i<number.size(); i++)
    {
        answer += number[i];
    }
    
    return answer;
}
728x90
반응형
댓글
05-01 18:03
링크