728x90
반응형
문제 : [1차] 다트 게임
풀이 방법
벡터 배열을 하나 만들어서 dartResult를 전부 분해해서 다시 넣었다. 왠지 그렇게 하는게 조건문을 만들 경우 편할 것 같아서 그랬다. 문자열 10은 아스키코드가 따로 없다보니 1이 나오고 그다음 숫자가 0이면 10을 넣고 두칸 건너뛰는 방식으로 분해를 했고 answer 벡터를 만들고 int temp를 만들어서 SDT*#을 각각 계산해주고 temp를 answer 벡터에 넣고 마지막 answer에 answer 벡터의 값을 다 더해주는 방식으로 문제를 풀었다. *#이 나올때가 있고 안나올 때가있으며 10이라는 숫자가 나올 수 있으니 그걸 어떻게 해야할까 고민하는데 시간을 썼고 숫자를 어떻게 인식할지 거기에 시간을 많이 쓴거같다.
소스 코드
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int answer = 0;
vector<string> arr;
vector<int> answer_temp;
for(int i=0; i<dartResult.size(); i++) {
if(dartResult[i] == '1' && dartResult[i+1] == '0') {
arr.push_back("10");
i++;
}
else {
string temp;
temp.push_back(dartResult[i]);
arr.push_back(temp);
}
}
int temp;
for(int i=0; i<arr.size(); i++) {
if(isdigit(arr[i][0]) || arr[i] == "10") {
if(i != 0 && isdigit(arr[i - 1][0]) == 0 ) {
answer_temp.push_back(temp);
}
temp = stoi(arr[i]);
}
else if(arr[i] == "S") {
temp = pow(temp, 1);
}
else if(arr[i] == "D") {
temp = pow(temp, 2);
}
else if(arr[i] == "T") {
temp = pow(temp, 3);
}
else if(arr[i] == "*") {
temp *= 2;
if(!answer_temp.empty()) {
int back_temp = answer_temp.back();
answer_temp.pop_back();
back_temp *= 2;
answer_temp.push_back(back_temp);
}
}
else if(arr[i] == "#") {
temp *= -1;
}
}
answer_temp.push_back(temp);
for(int & i : answer_temp) {
answer += i;
}
return answer;
}
728x90
반응형
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 1, C++] 크레인 인형뽑기 게임 (0) | 2022.07.08 |
---|---|
[프로그래머스 Level 1, C++] 실패율 (0) | 2022.07.07 |
[프로그래머스 Level 1, C++] 로또의 최고 순위와 최저 순위 (0) | 2022.07.06 |
[프로그래머스 Level 1, C++] [1차] 비밀지도 (0) | 2022.07.05 |
[프로그래머스 Level 1, C++] 내적 (0) | 2022.07.05 |