주어지는 조건에 맞게 점수를 계산해주면 되는 간단한 문제이다. sstream을 사용해서 인덱스를 생각하지 않고도 풀 수 있지만 해당 풀이는 인덱스를 사용하여 풀었다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(string dartResult) {
vector<int> answer(3,0);
int idx = 0;
for (int i=0; i<dartResult.size(); i++) {
if (isdigit(dartResult[i])) {// 일단 점수먼저 넣어준다.
answer[idx++] = stoi(dartResult.substr(i));
if (isdigit(dartResult[i+1])) i++;
}
}
for (int i=0, idx=0; i<dartResult.size(); i++) {
if (dartResult[i] == 'S') {// 싱글일때
idx++;
} else if (dartResult[i] == 'D') {// 더블일때
answer[idx] = pow(answer[idx], 2);
idx++;
} else if (dartResult[i] == 'T') {// 트리플일때
answer[idx] = pow(answer[idx], 3);
idx++;
} else if (dartResult[i] == '*') {// * 일때
for (int j=idx-1;j>=0 && j>=idx-2;j--) {// 바로 처음점수에 *이 따라오는 부분에 대한 처리를 잘해주자.
answer[j] *= 2;
}
} else if (dartResult[i] == '#') {// # 일때
answer[idx-1] *= -1;
}
}
return answer[0] + answer[1] + answer[2];
}