코드카타-개인정보 수집 유효기간
💡 핵심 힌트: 날짜를 '일(Day)' 단위로 통일하기
가장 편한 방법은 모든 날짜를 (연도 * 12 * 28) + (월 * 28) + 일 형태의 정수로 변환하는 것입니다.
- 오늘 날짜 변환: today 문자열을 분석해 총 일수로 변환합니다.
- 약관 저장: std::map<char, int>을 사용하여 약관 종류별 유효기간(달 수 * 28일)을 저장합니다.
- 개인정보 확인: 각 privacies를 순회하며 수집 일자를 총 일수로 변환한 뒤, 해당 약관의 유효기간을 더합니다.
- 비교: (수집일 기반 만료일) <= 오늘 날짜라면 파기 대상입니다.
- 문제에서 "2022.05.19까지 보관 가능"하고 오늘이 "2022.05.19"라면 아직 파기 대상이 아닙니다. 즉, 만료일이 오늘보다 작거나 같으면(Strictly before today) 파기해야 합니다.
#include <string>
#include <vector>
#include <sstream>
#include <map>
using namespace std;
// 날짜 문자열 "YYYY.MM.DD"를 총 일수로 변환하는 함수
int dateToDays(string date) {
int y = stoi(date.substr(0, 4));
int m = stoi(date.substr(5, 2));
int d = stoi(date.substr(8, 2));
return (y * 12 * 28) + (m * 28) + d;
}
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
// 1. 오늘 날짜를 일 단위로 변환
int todayDays = dateToDays(today);
// 2. 약관 정보를 Map에 저장 (Key: 약관종류, Value: 유효기간 일수)
map<char, int> termMap;
for (string term : terms) {
stringstream ss(term);
char type;
int month;
ss >> type >> month;
termMap[type] = month * 28; // 달 수를 일 수로 변환
}
// 3. 개인정보를 하나씩 확인
for (int i = 0; i < privacies.size(); i++) {
// "2021.05.02 A" 형태 분리
string dateStr = privacies[i].substr(0, 10);
char type = privacies[i].back();
int collectedDays = dateToDays(dateStr);
int expiryDays = collectedDays + termMap[type];
// 4. 오늘 날짜와 비교 (오늘 날짜가 만료일과 같거나 크면 파기)
if (expiryDays <= todayDays) {
answer.push_back(i + 1); // 번호는 1번부터 시작
}
}
return answer;
}
분반 수업 내용
'TIL' 카테고리의 다른 글
| 3/20일자 TIL (0) | 2026.03.20 |
|---|---|
| 3/19일자 TIL (0) | 2026.03.19 |
| 3/18일자 TIL (0) | 2026.03.18 |
| 3월 17일자 TIL (0) | 2026.03.17 |
| 3/16일자 TIL (0) | 2026.03.16 |