2018년 카카오 블라인드 테스트에 나왔던 문제이다. 내가 처음으로 푼 코딩 테스트 기출 문제이기도 하다. 조건에 맞는 계산을 하면되는 문제로 그렇게 어렵지는 않겠다... 생각했지만 어려웠다(ㅠㅠ). 제일 큰 문제는 10이 나왔을 때였는데, 10을 어떻게 처리하면 좋을지 아무리 고민해도 답이 나오지 않길래 다른 이들의 풀이를 참고(...ㅎㅎ) 했다.
쉬워 보이는 문제였고 실로 쉬운 문제라 좀 짜증났지만, 어쩔 수 없어... 뭐든 처음이 어려운 법이지! 그래, 그래~
벡터에다가 계산한 값을 차례대로 저장해서 총 더해주는 방식을 선택했다. if, else if문을 사용해서 조건에 맞는 계산을 해준다.
중요한 건 10이 나왔을 때인데 만일 i + 1이 0이면 배열에다가 10을 넣어주고 i를 ++해준다. 그 이유는 10이라는 문자는 총 2개의 배열을 차지하고 있기 때문이다. 그렇지 않으면 -'0'을 해서 숫자를 넣어준다.
https://greenapple16.tistory.com/76
이 블로그의 풀이를 참고했다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int count = 0;
vector<int> result;
for(int i = 0; i < dartResult.size(); i++){
//10이 문제다.
if(dartResult[i] == 'S'){}
else if(dartResult[i] == 'D'){
result[count-1] = pow(result[count-1],2);
}else if(dartResult[i] == 'T'){
result[count-1] = pow(result[count-1],3);
}else if(dartResult[i] == '*'){
if(i>1){
result[count-1] = result[count-1]*2;
result[count-2] = result[count-2]*2;
}else{
result[count-1] = result[count-1]*2;
}
}else if(dartResult[i] == '#'){
result[count-1] = result[count-1]*(-1);
}else{
if(dartResult[i+1] == '0'){
result.push_back(10);
i = i + 1;
}else{
result.push_back(dartResult[i] - '0');
}
count++;
}
}
for(int i = 0; i < result.size(); i++){
answer = answer + result[i];
}
return answer;
}
아악!!! 쉬운 문제의 풀이를 참고하다니, 자존심에 상처를 입었다. 심지어 남들은 다 푸는 거 같은데 나만 못 푸는 거 같아!!! 아주... 상처 난 곳에 소금 뿌리는 격으로 쓰라리다... 칫... 다음 문제는 꼭 나 혼자서 풀 거다.