728x90
SMALL
프로그래머스 문제 풀이: 개인정보 수집 유효기간
문제 링크: 문제 보기
문제 설명:
개인정보 수집일과 약관별 유효기간이 주어졌을 때, 현재 날짜를 기준으로 유효기간이 만료된 개인정보의 번호를 찾는 문제입니다. 날짜 계산 시, 모든 달을 28일로 고정하여 계산해야 합니다.
문제 해결 코드
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int alpha[26]; // 각 약관의 유효기간 저장
// 날짜를 일(day) 단위로 변환하는 함수
int convertToDays(string date) {
istringstream s(date);
string sb;
int i = 1, totalDays = 0;
while (getline(s, sb, '.')) {
if (i == 1) totalDays += stoi(sb) * 28 * 12; // 연도 변환
else if (i == 2) totalDays += stoi(sb) * 28; // 월 변환
else totalDays += stoi(sb); // 일 변환
i++;
}
return totalDays;
}
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
int todayDays = convertToDays(today); // 현재 날짜 변환
// 약관별 유효기간 저장
for (string& term : terms) {
istringstream ss(term);
string key, value;
ss >> key >> value;
alpha[key[0] - 'A'] = stoi(value) * 28; // 약관 기간을 일 단위로 변환
}
// 개인정보 만료 여부 확인
for (int i = 0; i < privacies.size(); i++) {
istringstream ss(privacies[i]);
string date, term;
ss >> date >> term;
int privacyDate = convertToDays(date); // 개인정보 수집일 변환
int validPeriod = alpha[term[0] - 'A']; // 약관에 따른 유효기간
if (privacyDate + validPeriod - 1 < todayDays) { // 만료 확인
answer.push_back(i + 1);
}
}
return answer;
}
코드 설명
- 핵심 알고리즘: 모든 날짜를 일(day) 단위로 변환하여 비교합니다. 약관별 유효기간을 고려하여 만료된 개인정보를 찾습니다.
- 구현 세부사항:
convertToDays
함수는 날짜를연*28*12 + 월*28 + 일
형태로 변환하여 비교를 단순화합니다.- 약관 정보를
alpha
배열에 저장하여 빠르게 유효기간을 가져올 수 있도록 처리합니다. - 개인정보 수집일 + 유효기간 - 1이 오늘 날짜보다 작으면 만료된 것으로 판단합니다.
- 시간 복잡도 분석:
- 날짜 변환: O(1)
- 약관 저장: O(t), 여기서 t는 약관 개수
- 개인정보 확인: O(p), 여기서 p는 개인정보 개수
- 총 시간 복잡도: O(t + p)
결과
이 코드는 모든 날짜를 일(day) 단위로 변환하여 간단한 비교 연산만으로 개인정보의 만료 여부를 확인합니다. 빠르고 직관적인 방식으로 해결하였습니다.
다른 접근 방식으로는 연, 월, 일을 따로 비교하여 연산하는 방법도 있지만, 날짜를 일 단위로 변환하는 것이 비교를 훨씬 간단하게 만들어줍니다.
728x90
LIST
'programmers' 카테고리의 다른 글
프로그래머스 [연습문제 / 문자열 나누기](C++) -yes6686- 티스토리 (0) | 2025.03.24 |
---|---|
프로그래머스 [연습문제 / 가장 가까운 같은 글자](C++) -yes6686- 티스토리 (0) | 2025.03.24 |
프로그래머스 [연습문제 / 둘만의 암호](C++) -yes6686- 티스토리 (0) | 2025.03.08 |
프로그래머스 [2025 프로그래머스 코드챌린지 1차 예선 / 유연근무제](C++) -yes6686- 티스토리 (0) | 2025.03.05 |
프로그래머스 [SUM, MAX, MIN / 조건에 맞는 아이템들의 가격의 총합 구하기](MySQL) -yes6686- 티스토리 (0) | 2025.02.21 |