개인정보 수집 유효기간 C++

유승선 ·2023년 1월 23일
0

프로그래머스

목록 보기
33/48

분명 쉬운 문제인데 테스트 케이스 변화구 때문에 다 통과하는데까지 시간이 오래 걸린 짜증나는 문제였다. 실제로 내가 이 문제를 실제 코테에서 풀었을때도 테스트 케이스 하나가 통과가 안돼서 좀 애먹었던 기억이 난다. 결론적으로 이런 시간이 포함된 문자열 파싱 문제에서는 모든 시간을 하나의 단위로 통일 하는것이 핵심 포인트 인거같다.

내가 여기서 애를 먹었던거는 달하고 일만 통일 시키려고 했던 부분이었고 실제로 년도까지 전부 통일 시켜야지 정말 수월하게 모든 테케를 통과시킬 수 있었다. 개인적으로 통과된 이 코드도 썩 마음에 드는 코드는 아닌데 그래도 누군가 봤을때 조금 더 이해하기 쉬운 코드일 수 도 있겠다 생각은 들었다. 모든 달은 28일로 이루어져 있고 1월부터 12월까지 전부 로 환산했을때 1월1일은 1로 시작해야 하고 2월1일은 29가 되어야한다. 왜냐하면은 1월은 28일에 끝날것이고 2월은 그 다음날인 29일에 시작하기 때문이다. 이런식으로 모든 달을 일로 바꿔주는 Map을 사용했고 day에 -1을 해준것은 우리는 어떤 달이든 1일부터 시작했기 때문에 이미 주어진 달에는 -1을 해야하기 때문이다.

솔직히 레벨1의 문제는 이해가는데 이런 달 하고 일을 바꿔주는 과정을 좀 생각하는게 레벨2까지도 갈 수 있다고 생각하긴 한다. 앞으로 시간과 관련된 모든 문제는 통일 할 수 있도록 생각해보자.

#include <string>
#include <vector>
#include <bits/stdc++.h> 
using namespace std;

vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
    vector<int> answer;
    map<char,int> termsMap; 
    map<int,int> monthMap; 
    int today_year = stoi(today.substr(0,4)); 
    int today_month = stoi(today.substr(5,2)); 
    int today_day = stoi(today.substr(8,2)); 
    monthMap[1] = 1; 
    monthMap[2] = 29; 
    monthMap[3] = 29 + 28; 
    monthMap[4] = monthMap[3] + 28; 
    monthMap[5] = monthMap[4] + 28; 
    monthMap[6] = monthMap[5] + 28; 
    monthMap[7] = monthMap[6] + 28; 
    monthMap[8] = monthMap[7] + 28; 
    monthMap[9] = monthMap[8] + 28; 
    monthMap[10] = monthMap[9] + 28; 
    monthMap[11] = monthMap[10] + 28; 
    monthMap[12] = monthMap[11] + 28; 
    
    int tmp_total = monthMap[today_month] + today_day - 1; 
    int today_total = today_year * 12 * 28 + tmp_total;
    for(string& s : terms){
        char c; 
        int num; 
        istringstream iss(s); 
        iss >> c >> num; 
        termsMap[c] = num; 
    }

    for(int i = 0; i < privacies.size(); i++){
        int new_year = stoi(privacies[i].substr(0,4)); 
        int new_month = stoi(privacies[i].substr(5,2)); 
        int new_day = stoi(privacies[i].substr(8,2)); 
        char ch = privacies[i][11]; 
        
        int new_total = (monthMap[new_month] + (termsMap[ch] * 28))+ new_day -2; 
        int tmp = new_year * 12 * 28 + new_total;
        
        if(today_total > tmp) answer.push_back(i+1); 
        
    }
    


    return answer;
}
profile
성장하는 사람

0개의 댓글