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

#include <string>
#include <vector>
#include <math.h>
using namespace std;

void charCmp(char& dart, int part, vector<int>& score) {
	switch (dart) {
	case 'S':
		score.push_back(part);
		break;
	case 'D':
		score.push_back(pow(part, 2));
		break;
	case 'T':
		score.push_back(pow(part, 3));
		break;
	case '*':
        if(score.size() == 1) score[0] *= 2;
        else {
            score.back() *= 2;
            score[score.size() -2] *= 2;
        }
		break;
	case '#':
		score[score.size() - 1] *= -1;
		break;
	}
}

int solution(string dartResult) {
	int answer = 0;
	int part = 0;
	vector<int> saveScore;
	for (int i = 0; i < dartResult.length(); ++i)
	{
		if (isdigit(dartResult[i])) {
			part = part * 10 + dartResult[i] - '0';
		}
		else {
			charCmp(dartResult[i], part, saveScore);
            part = 0;
		}
	}
	for (const auto& s : saveScore) {
		answer += s;
	}
	return answer;
}