알고리즘 문제풀이/카카오

[2017 카카오 코딩테스트] 다트 게임

홍시홍 2020. 7. 24. 00:08

분류 

시뮬레이션

요구사항

다트 던진 경기 결과 값 구하기

풀이

다트를 3번 던지고

S, D, T와 *, #만 주어진 대로 처리하면 된다

*을 처리하기 위해서 flag배열을 사용하여 1->3의 순서로 *이 주어졌다면 이전 index에 *을 추가하였다

나머지는 문제에서 주어진 대로 하드코딩하였다

 

#include <string>
#include <vector>
#include <iostream>
#include <queue>
#include <string.h>
#include <algorithm>
#include <deque>
#include <map>

using namespace std;
struct go{
    int x;
    int y;
    int z;
};
vector<string> v1;
int main(){
    //1S2D*3T
    //0 48 9 57
    string str= "1T2D3D#";
    int cnt=0;
    vector<string> v[5];
    vector<int> answer;
    int flag[5]={0,}; //*2 +1
    string temp;
    for(auto i : str){
        char ch=i;
        if(i>=48 && i<=57){
            v[cnt].push_back(temp);
            temp.clear();
            cnt++;
        }
        temp+=i;
        if(i=='*'){
            flag[cnt]++;
        }
    }
    if(flag[2]==1){
        flag[1]++;
    }
    if(flag[3]==1){
        flag[2]++;
    }
    v[cnt].push_back(temp);
    for(int i=1; i <=3 ; i++){
    
        int tempnum=0;
        int mulnum=0;
        string nowstr=v[i].front();
        tempnum=stoi(v[i].front());
        mulnum=tempnum;
        if(nowstr[0]==49 && nowstr[1]==0){
            tempnum=10;
            mulnum=tempnum;
        }
        if(tempnum==10){
            for(int j=2 ; j<nowstr.size() ; j++){
                if(j==0){
                    tempnum=nowstr[j]-48;
                    mulnum=tempnum;
                }
                if(nowstr[j]=='S'){
                    continue;
                }
                else if(nowstr[j]=='D'){
                    for(int k=0 ; k<1 ; k++)
                        tempnum*=mulnum;
                }
                else if(nowstr[j]=='T'){
                    for(int k=0 ; k<2 ; k++)
                        tempnum*=mulnum;
                }
                if(nowstr[j]=='#'){
                    tempnum*=-1;
                }
            }       
        }
        else{
            for(int j=1 ; j<nowstr.size() ; j++){
                if(j==0){
                    tempnum=nowstr[j]-48;
                    mulnum=tempnum;
                }
                if(nowstr[j]=='S'){
                    continue;
                }
                else if(nowstr[j]=='D'){
                    for(int k=0 ; k<1 ; k++)
                        tempnum*=mulnum;
                }
                else if(nowstr[j]=='T'){
                    for(int k=0 ; k<2 ; k++)
                        tempnum*=mulnum;
                }
                if(nowstr[j]=='#'){
                    tempnum*=-1;
                }
            }
        }
        for(int j=0; j< flag[i]; j++){
            tempnum*=2;
        }

        answer.push_back(tempnum);
    }
    int ans=0;
    for(auto i : answer){
        ans+=i;
    }
    cout<<ans<<endl;


    


}