[C_C++]코딩테스트 연습/[프로그래머스] level 1
[C++] 프로그래머스 - 다트 게임
코딩굼벵이
2021. 7. 21. 21:59
728x90
내 풀이
- string을 돌면서 숫자면 score에 담는다. 숫자가 이어서 나올 경우 먼저 나온 수가 10의자리로 밀리도록 했다.
숫자가 나왔을 때는 score을 0으로 초기화하지 않고 다시 돌려서 이후에도 쓸 수 있게 해줬다. - 특수문자, 특히 *이 나왔을 때는 앞의 숫자까지 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;
}
어렵다...