코딩테스트 연습 > 2023 KAKAO BLIND RECRUITMENT > 개인정보 수집 유효기간
나의 야망은 아래와 같았다.
그렇게 나온 것
#include <string>
#include <vector>
#include <map>
using namespace std;
string calc_date(string today, string term_months) {
int tm = stoi(term_months),
tm_y = tm / 12,
tm_m = tm % 12,
td_y = stoi(today.substr(0, 4)),
td_m = stoi(today.substr(4, 2)),
td_d = stoi(today.substr(6));
td_m -= tm_m;
td_y -= tm_y;
if (td_d == 1) { td_d = 28; --td_m; }
if (td_m < 1) { td_m += 12; --td_y; }
return to_string(td_y) + "." + (td_m < 10 ? "0" + td_m : to_string(td_m)) + "." + (td_d < 10 ? "0" + td_d : to_string(td_d));
}
bool compare_date(string pr_date, string tm_date) {
int pr_y = stoi(pr_date.substr(0, 4)),
pr_m = stoi(pr_date.substr(4, 2)),
pr_d = stoi(pr_date.substr(6)),
tm_y = stoi(tm_date.substr(0, 4)),
tm_m = stoi(tm_date.substr(4, 2)),
tm_d = stoi(tm_date.substr(6));
if (pr_y < tm_y) return true;
else if (pr_y > tm_y) return false;
else if (pr_m < tm_m) return true;
else if (pr_m > tm_m) return false;
else if (pr_d < tm_d) return true;
else return false;
}
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
map<char, string> terms_map;
for (int i = 0; i < terms.size(); ++i) {
terms_map.insert({terms[i][0], calc_date(today, terms[i].substr(2))});
}
for (int i = 0; i < privacies.size(); ++i) {
if (compare_date(privacies[i].substr(0, 11), terms_map.find(privacies[i][11])->second)) answer.push_back(i + 1);
}
return answer;
}
그리고 그것의 결과:
signal: aborted (core dumped)
테스트 결과 (~˘▾˘)~
2개 중 0개 성공
ㅋㅋ 어림도 없지
코드도 코드인데 그것보다 더 기초적인 바보짓을 했다
substr을 사용한 곳에서 index 지정을 잘못한 바람에 모든 것이 꼬였기 때문이었다...
개선한 풀이
#include <string>
#include <vector>
#include <map>
using namespace std;
bool isExpired(int months, string today, string pv_day) {
int t_y = stoi(today.substr(0, 4)),
t_m = stoi(today.substr(5, 2)),
t_d = stoi(today.substr(8)),
pv_y = stoi(pv_day.substr(0, 4)),
pv_m = stoi(pv_day.substr(5, 2)),
pv_d = stoi(pv_day.substr(8));
long long td = t_d + t_m * 28 + t_y * 12 * 28,
pv = pv_d + pv_m * 28 + pv_y * 12 * 28;
if (td - pv <= months * 28 - 1) return false;
return true;
}
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
map<char, int> terms_map;
for (int i = 0; i < terms.size(); ++i) {
terms_map.insert(make_pair(terms[i][0], stoi(terms[i].substr(2))));
}
for (int i = 0; i < privacies.size(); ++i) {
char term_code = terms_map.at(privacies[i][11]);
if (isExpired(term_code, today, privacies[i].substr(0, 10))) answer.push_back(i + 1);
}
return answer;
}
연월일을 모두 일로 환산해서 차를 비교했더니 정상적으로 동작했는데 정리한 것 치고 많이 지저분하다.
더 정리할 수 있는 방법을 찾아봐야겠다...