[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 프로그래머스 - 다트 게임

코딩굼벵이 2021. 7. 21. 21:59
728x90

내 풀이

  1. string을 돌면서 숫자면 score에 담는다. 숫자가 이어서 나올 경우 먼저 나온 수가 10의자리로 밀리도록 했다.
    숫자가 나왔을 때는 score을 0으로 초기화하지 않고 다시 돌려서 이후에도 쓸 수 있게 해줬다.
  2. 특수문자, 특히 *이 나왔을 때는 앞의 숫자까지 2배가 돼야한다. 처음에 *이 나왔을 경우 자신만 2배가 되게 했다.

 

#include <string>
#include <vector>

using namespace std;

int solution(string dartResult) {
    int answer=0;
    vector<int> with_bonus;
    int score = 0;
    for (int i = 0; i < dartResult.size(); i++) {
        if (dartResult[i] >= '0' && dartResult[i] <= '9') {
            score = score * 10 + dartResult[i] - '0';
            continue;
        }
        else if (dartResult[i] == 'S') with_bonus.push_back(score);
        else if (dartResult[i] == 'D') with_bonus.push_back(score*score);
        else if (dartResult[i] == 'T') with_bonus.push_back(score*score*score);
        else if (dartResult[i] == '*') {
            if (with_bonus.size() != 1) with_bonus[with_bonus.size()-2] *= 2;
            with_bonus.back() *= 2;
        }
        else if (dartResult[i] == '#') {
            with_bonus.back() *= -1;
        }
        score = 0;
    }
    for (int i = 0; i < with_bonus.size(); i++) {
        answer += with_bonus[i];
    }

    return answer;
}

 

 

 

어렵다...