[Java] 개인정보 수집 유효기간 - 2023 카카오 블라인드 Lv1 프로그래머스코딩테스트/프로그래머스2023. 1. 24. 15:12
Table of Contents
728x90
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/150370
풀이
String형식의 날짜(2022.05.05)를 형변환 한 뒤, Day로 치환하여 풀었다.
모든 달의 날짜가 28일까지라는 것이 조건이었기 때문에, 월별로 날짜의 수가 다른 것을 고려할 필요가 없었다.
Int로 형변환 하는 메서드
substring을 활용하여 년, 월, 일을 뽑아내어 int형태의 날짜로 변환하였다.
문제 조건에서 년도는 2000~2022년도 까지라고 했기때문에 뒤의 두자리만 뽑아내었다.
int intDay(String str) {
String tooday = str.replace(".", "");
int year = Integer.parseInt(tooday.substring(2,4));
int month = Integer.parseInt(tooday.substring(4,6));
int day = Integer.parseInt(tooday.substring(6,8));
return year*12*28 + month*28 + day;
}
문제에서 제시된 terms와 privacies배열을 풀기 좋게 split을 사용하여 약관종류, 유효기간(수집일자)로 나눠담았다.
위의 intDay 메서드를 활용하여 privacies의 수집 일자를 int 형태로 변환했다.
public int[] solution(String today, String[] terms, String[] privacies) {
int cnt = intDay(today);
String[] p1 = new String[privacies.length];
int[] p2 = new int[privacies.length];
int pLen = privacies.length;
String tmp = "";
for(int i=0; i<pLen; i++) {
p1[i] = privacies[i].split(" ")[1];
tmp = privacies[i].split(" ")[0];
p2[i] = intDay(tmp);
}
String[] t1 = new String[terms.length];
int[] t2 = new int[terms.length];
int tLen = terms.length;
for(int i=0; i<tLen; i++) {
t1[i] = terms[i].split((" "))[0];
tmp = terms[i].split(" ")[1];
t2[i] = (Integer.parseInt(tmp)*28);
}
(...생략...)
약관 종류가 같을 경우 해당 약관 별 수집 일자의 유효기간만큼 + 해주었고
(...생략...)
for(int i=0; i<tLen; i++) {
for(int j=0; j<pLen; j++) {
if(t1[i].equals(p1[j])) {
p2[j] += t2[i];
}
}
}
(...생략...)
today를 int로 바꿨던 cnt와 만료 유효기간과 비교하여 배열의 index+1 결과값으로 담아냈다.
(...생략...)
List<Integer> answer = new ArrayList<>();
for(int i=0; i<pLen; i++) {
if(p2[i]<cnt) {
answer.add(i+1);
}
}
int[] ans = new int[answer.size()];
for(int i=0; i<answer.size(); i++) {
ans[i] = answer.get(i);
}
return ans;
}
전체 코드
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
int cnt = intDay(today);
String[] p1 = new String[privacies.length];
int[] p2 = new int[privacies.length];
int pLen = privacies.length;
String tmp = "";
for(int i=0; i<pLen; i++) {
p1[i] = privacies[i].split(" ")[1];
tmp = privacies[i].split(" ")[0];
p2[i] = intDay(tmp);
}
String[] t1 = new String[terms.length];
int[] t2 = new int[terms.length];
int tLen = terms.length;
for(int i=0; i<tLen; i++) {
t1[i] = terms[i].split((" "))[0];
tmp = terms[i].split(" ")[1];
t2[i] = (Integer.parseInt(tmp)*28);
}
for(int i=0; i<tLen; i++) {
for(int j=0; j<pLen; j++) {
if(t1[i].equals(p1[j])) {
p2[j] += t2[i];
}
}
}
List<Integer> answer = new ArrayList<>();
for(int i=0; i<pLen; i++) {
if(p2[i]<cnt) {
answer.add(i+1);
}
}
int[] ans = new int[answer.size()];
for(int i=0; i<answer.size(); i++) {
ans[i] = answer.get(i);
}
return ans;
}
int intDay(String str) {
String tooday = str.replace(".", "");
int year = Integer.parseInt(tooday.substring(2,4));
int month = Integer.parseInt(tooday.substring(4,6));
int day = Integer.parseInt(tooday.substring(6,8));
return year*12*28 + month*28 + day;
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!