Mini

프로그래머스 개인정보 수집 유효기간 // c++ split, 단위를통일하라, 함수화하고 cout으로 단위테스트하라. 본문

Algorithm/programmers

프로그래머스 개인정보 수집 유효기간 // c++ split, 단위를통일하라, 함수화하고 cout으로 단위테스트하라.

Mini_96 2023. 6. 28. 17:14

*c++ split

vector<string> split(string input, string deli){
    long long pos=0;
    vector<string> ret;
    string token="";
    while((pos=input.find(deli))!=string::npos){
        token=input.substr(0,pos);
        ret.push_back(token);
        input.erase(0,pos+deli.size());
    }
    ret.push_back(input);
    return ret;
}

* 시간, 날짜문제는 제일적은단위로 단위를통일하라

//2022, 05, 19 -> 99999일
//test 완료.
long long todayToDay(vector<string> v){
    long long ret=0;
    ret+=stoi(v[0])*336;
    ret+=stoi(v[1])*28;
    ret+=stoi(v[2]);
    return ret;
}

 

*함수화하고 cout으로 단위테스트하라.

vector<int> solution(string today, vector<string> terms, vector<string> privacies) {

    
    //today 를 일 로 바꾸기
    vector<string> v =split(today,".");
    todayDays=todayToDay(v);
    //cout<<todayDays;

 

#include <bits/stdc++.h>

using namespace std;

int today;
map<string,int> m;
vector<int> answer;
long long todayDays;

vector<string> split(string input, string deli){
    long long pos=0;
    vector<string> ret;
    string token="";
    while((pos=input.find(deli))!=string::npos){
        token=input.substr(0,pos);
        ret.push_back(token);
        input.erase(0,pos+deli.size());
    }
    ret.push_back(input);
    return ret;
}

//2022, 05, 19 -> 99999일
//test 완료.
long long todayToDay(vector<string> v){
    long long ret=0;
    ret+=stoi(v[0])*336;
    ret+=stoi(v[1])*28;
    ret+=stoi(v[2]);
    return ret;
}

//test 완
void termsToMap(vector<string> terms){
    //vector<string> s=split(terms," ");
    for(auto str : terms){
        vector<string> v=split(str," ");
        m[v[0]]=stoi(v[1])*28;
    }
}

void privacyToDayAndCheck(vector<string> privacies){
    int idx=1;
     for(auto privacy : privacies){
         
         vector<string> v = split(privacy,".");
         //2021.05.02 A->2021, 05, [02 A] -> 2021, 05, 02, A==temp[1]
         //test완료.
         
         vector<string> temp=split(v[2]," ");
         v.pop_back();
         v.push_back(temp[0]);
         //v.push_back(temp[1]);    
         //=============test완료========================
         /*for(auto i : v){
             cout<<i<<endl;
         }*/
         
         long long dayss=todayToDay(v);
         //cout<<dayss<<endl;
         if(abs(dayss-todayDays)>=m[temp[1]]) {
             answer.push_back(idx);
         }
         ++idx;
         
        
         
    }
}
    //cout<<m[]
//                                              유효기간,                개인정보
//출 : 파기할 개인정보 번호
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {

    
    //today 를 일 로 바꾸기
    vector<string> v =split(today,".");
    todayDays=todayToDay(v);
    //cout<<todayDays;
    
    //map[A]=유효일수 로 저장
    termsToMap(terms);
    /*cout<<m["A"]<<endl;
    cout<<m["B"]<<endl;
    cout<<m["C"]<<endl;*/
    
    
    //privacies를 일로 바꾸기
    privacyToDayAndCheck(privacies);
    
    
    //오늘과 차이 > map[privacy] push idx
    
    
    /*for(auto i : v) {
        cout<<i<<endl;
    }*/
    //cout<<28*12;
    //1년은 336일
    //1달은 28일
    //cout<<todayToDay(v);
    
    
    return answer;
}