#17682 다트 게임
문제 정리
S = 제곱, D = 2제곱, T = 3제곱
* = 해당 점수, 전 점수 곱하기 2
# = 해당 점수 마이너스
만약에 **가 되면 4배
만약에 #*가 되면 -2배
생각해보기
점수|보너스|(옵션)
으로 오는 애들을 우선 문자로 하나하나 분리해야 될 것 같다.
점수+보너스를 한 배열에, 옵션을 한 배열에 넣어야… (옵션이 전 점수에 영향을 주는 경우도 있으므로)
그다음에 한 번에 계산하는게 좋을 것 같다.
다시다시
*이 나오면 현재, 전꺼에 *2
#이 나오면 현재꺼에 *(-1)
10이 포함이니까… 처음에 1이 나왔을 때 뒤에가 0이면 분기처리를 해 줘야 할 듯.
코드 쓰기
내 풀이
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string dartResult) {
int answer = 0;
vector<int> num;
vector<char> options;
for(int i=0; i<dartResult.length(); i++){
if( '0' <= dartResult[i] && dartResult[i] <= '9'){
if(dartResult[i] == '1' && dartResult[i+1] == '0'){
// 점수가 10일 때
num.push_back(10);
i++;
}else{
num.push_back(dartResult[i] - '0');
}
} else if (dartResult[i] == 'D'){
num.back() *= num.back();
} else if (dartResult[i] == 'T'){
num.back() *= num.back() * num.back();
} else if (dartResult[i] == '*'){
if(num.size() == 1){
num.back() *= 2;
} else {
num.back() *= 2;
num[num.size()-2] *= 2;
}
} else if (dartResult[i] == '#'){
num.back() *= -1;
}
}
for(int i=0; i<num.size(); i++){
answer += num[i];
}
return answer;
}