개발 창고/Algorithm
[프로그래머스] 개인정보 수집 유효기간 - JAVA
로이제로
2024. 2. 21. 08:00
반응형
이 버전에서는 TOC를 지원하지 않습니다. (ex. 모바일)
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.
풀이
제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.
import java.util.HashMap;
import java.util.ArrayList;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
ArrayList<Integer> answer = new ArrayList<>();
// Step. terms를 map으로 변환
HashMap<String, Integer> tmap = new HashMap<>();
for(String term : terms){
tmap.put(term.split(" ")[0], Integer.parseInt(term.split(" ")[1]));
}
System.out.println(tmap);
// Step. today를 Int형으로 변환
// 28일까지로 가정하므로, 1y = 12 * 28d, 1m = 28d
// dot(.)은 \\.로 split해야 됨
int nToday = Integer.parseInt(today.split("\\.")[0]) * 12 * 28
+ Integer.parseInt(today.split("\\.")[1]) * 28
+ Integer.parseInt(today.split("\\.")[2]);
// System.out.println(today + " " + nToday);
// Step. 개인정보 중 유효기간이 지난 항목만 조회
for(int i = 0; i < privacies.length; i++){
String privacy = privacies[i];
String regdate = privacy.split(" ")[0];
String type = privacy.split(" ")[1];
int nRegdate = Integer.parseInt(regdate.split("\\.")[0]) * 12 * 28
+ Integer.parseInt(regdate.split("\\.")[1]) * 28
+ Integer.parseInt(regdate.split("\\.")[2]);
int nEnddate = nRegdate + tmap.get(type) * 28;
// System.out.println(regdate + " " + nRegdate + " " + nEnddate);
// Step. 등록일 + 유형별 유효기간이 오늘 날짜 이전이거나 같은 경우 파기 대상
if(nToday >= nEnddate){
// System.out.println(i + 1);
answer.add(i + 1);
}
}
// Step. ArrayList를 int[] 배열로 변환하여 반환
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
반응형