다트 게임

NJW·2021년 8월 23일
0

코테

목록 보기
70/170

들어가는 말

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;
}

P.s

아악!!! 쉬운 문제의 풀이를 참고하다니, 자존심에 상처를 입었다. 심지어 남들은 다 푸는 거 같은데 나만 못 푸는 거 같아!!! 아주... 상처 난 곳에 소금 뿌리는 격으로 쓰라리다... 칫... 다음 문제는 꼭 나 혼자서 풀 거다.

profile
https://jiwonna52.tistory.com/

0개의 댓글