2023 KAKAO BLIND RECRUITMENT - 개인정보 수집 유효기간 - C++

고동현·2024년 4월 25일
0

PS

목록 보기
18/51

문제바로가기

이번문제를 풀면서 꼭 파이선으로 바꿔야겠다는 생각이 들었다..ㅠ

이문제는 특별할것없이 과정은 대략 아래와같다.

  1. Map을 이용하여, 각 약관에 맞는 month넣기 -> 약관 중복없음
  2. 오늘날짜와, policies 날짜 파싱하기
  3. policies에 약관날짜를 더하기
  4. 오늘날짜와 policies날짜 비교하기

Map만들기

//map만들기
    for(int i=0;i<terms.size();i++){
        string policy = "";
        policy += terms[i][0];
        int month = 0;
        string tmp ="";
        for(int j=2;j<terms[i].size();j++){
            tmp+=terms[i][j];
        }
        month = stoi(tmp);
        m.insert({policy, month});
    }

policies날짜 파싱하기

for(int i=0;i<privacies.size();i++){
        string date = "";
        int j=0;
        for(j=0;j<privacies[i].size();j++){
            if(privacies[i][j] != ' '){
                date +=privacies[i][j];
            }else{
                break;
            }
        }
        string policy ="";
        policy+=privacies[i][j+1];
        
        //현재 	2021.05.02 A 파싱완료

마지막으로 검사하기

 int month = m[policy];
        
        if(!mycheck(today,date,month)){
            answer.push_back(i+1);
        }

mycheck에서 생각해야할게
이게 나도 처음에 너무 빠르게 문제를 풀려고해서, 당한게 뭐냐면, 날짜를 바꾸려고하는게 문제다.
이게 무슨말이냐면 11월에서 6개월을 더하면 17개월 1년 5개월이니까
year를 1추가 month를 5 추가 이러면 너무 빡세다

어차피 개월수가 28일로 한정되어있으니까
이걸 전부 date로 풀어서 전부 계산해서 비교해야한다

예를 들어 today가 2022 04 25라면
20221228 + 428 + 25
그리고 date가 2021 01 25이고 month가 5개월 추가라면
2021
1228 + 128 + 25
에다가 보관가능날짜는 1빼야하므로 1빼서 비교한다.

bool mycheck(string today, string date, int addmonth){
    string ty="";
    string tm="";
    string td="";
    for(int i=0;i<4;i++){
        ty+=today[i];
    }    
    for(int i=5;i<7;i++){
        tm+=today[i];
    }    
    for(int i=8;i<10;i++){
        td+=today[i];
    }
    
    string y="";
    string m="";
    string d="";
    
    for(int i=0;i<4;i++){
        y+=date[i];
    }    
    for(int i=5;i<7;i++){
        m+=date[i];
    }    
    for(int i=8;i<10;i++){
        d+=date[i];
    }
    
    long long todaytotal= stoi(ty) * 12 * 28 + stoi(tm) * 28 + stoi(td);
    long long pritotal = stoi(y) * 12 * 28 + (stoi(m)+addmonth) * 28 + stoi(d);
    if(todaytotal>pritotal-1){
        return false;
    }
    return true;
        
}

총코드

#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;

map<string,int> m;

bool mycheck(string today, string date, int addmonth){
    string ty="";
    string tm="";
    string td="";
    for(int i=0;i<4;i++){
        ty+=today[i];
    }    
    for(int i=5;i<7;i++){
        tm+=today[i];
    }    
    for(int i=8;i<10;i++){
        td+=today[i];
    }
    
    string y="";
    string m="";
    string d="";
    
    for(int i=0;i<4;i++){
        y+=date[i];
    }    
    for(int i=5;i<7;i++){
        m+=date[i];
    }    
    for(int i=8;i<10;i++){
        d+=date[i];
    }
    
    long long todaytotal= stoi(ty) * 12 * 28 + stoi(tm) * 28 + stoi(td);
    long long pritotal = stoi(y) * 12 * 28 + (stoi(m)+addmonth) * 28 + stoi(d);
    if(todaytotal>pritotal-1){
        return false;
    }
    return true;
        
}

vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
    vector<int> answer;
    //map만들기
    for(int i=0;i<terms.size();i++){
        string policy = "";
        policy += terms[i][0];
        int month = 0;
        string tmp ="";
        for(int j=2;j<terms[i].size();j++){
            tmp+=terms[i][j];
        }
        month = stoi(tmp);
        m.insert({policy, month});
    }
    
    for(int i=0;i<privacies.size();i++){
        string date = "";
        int j=0;
        for(j=0;j<privacies[i].size();j++){
            if(privacies[i][j] != ' '){
                date +=privacies[i][j];
            }else{
                break;
            }
        }
        string policy ="";
        policy+=privacies[i][j+1];
        
        //현재 	2021.05.02 A 파싱완료
        
        int month = m[policy];
        
        if(!mycheck(today,date,month)){
            answer.push_back(i+1);
        }
    }
    
    return answer;
}
profile
항상 Why?[왜썻는지] What?[이를 통해 무엇을 얻었는지 생각하겠습니다.]

0개의 댓글