개인정보 수집 유효기간 (Kakao) c++

이주희·2023년 2월 8일
0

Algorithm

목록 보기
15/24

입력정보

  • 오늘의 날짜 today (xxxx.xx.xx)
  • 약관 종류 (A 00)
  • 수집된 정보 (xxxx.xx.xx A)

해결

stoi 와 substr 함수를 사용해서 날짜 각 부분 분리해서 수로 저장,

주의할 점

  • 날짜에서 약관 달수를 더할 때
tmp_y += sum/12;
tmp_m = sum%12;

위와 같은 코드를 사용할 시 틀림
약정 개월을 더했을 때 딱 12달이 된다면
1년 추가하고 month가 0이 된다...

	if(tmp_m == 0){
            tmp_m = 12;
            tmp_y--;
	}

코드 추가시 해결 가능

  • 현재 날짜와 비교시
	if(tmp_y<today_y){ // 파기해야함 
            answer.push_back(i+1);
            continue;
        }else if(tmp_y == today_y){
            if(tmp_m < today_m){
                answer.push_back(i+1);
                continue;
            }else if(tmp_m == today_m){
                if(tmp_d <=today_d){
                    answer.push_back(i+1);
                }
            }
        }

약관 추가 날짜와 현재 날짜가 동일할 경우에도 파기 대상에 해당함 (문제 조건을 보면 계약일이 19일일때 종료일은 18일이 됨)

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;
int raw[50];
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
    vector<int> answer;
    int today_y = stoi(today.substr(0,4));
    int today_m = stoi(today.substr(5,7));
    int today_d = stoi(today.substr(8,10));
    for(int i=0;i<terms.size();i++){
        int month = stoi(terms[i].substr(2));
        //printf("%d ",month);
        raw[terms[i][0]-'A'] = month;
    }
    //printf("%d %d %d",today_y,today_m,today_d);
    for(int i=0;i<privacies.size();i++){
        int tmp_y = stoi(privacies[i].substr(0,4));
        int tmp_m = stoi(privacies[i].substr(5,7));
        int tmp_d = stoi(privacies[i].substr(8,10));
        int tmp = raw[privacies[i][11]-'A'];
        
        int sum = tmp_m + tmp;
        tmp_y += sum/12;
        tmp_m = sum%12;
        if(tmp_m == 0){
            tmp_m = 12;
            tmp_y--;
        }
        printf("%d %d %d \n",tmp_y,tmp_m,tmp_d);
        // if(tmp_d == 1){
        //     if(tmp_m ==1){
        //         tmp_y--;
        //         tmp_m = 12;
        //         tmp_d = 28;
        //     }else{
        //         tmp_m--;
        //         tmp_d = 28;
        //     }
        // }else{
        //     tmp_d--;
        // }
        if(tmp_y<today_y){ // 파기해야함 
            answer.push_back(i+1);
            continue;
        }else if(tmp_y == today_y){
            if(tmp_m < today_m){
                answer.push_back(i+1);
                continue;
            }else if(tmp_m == today_m){
                if(tmp_d <=today_d){
                    answer.push_back(i+1);
                }
            }
        }
    }
    return answer;
}

0개의 댓글