[문제 이름 : 개인정보 수집 유효기간 (프로그래머스, Lv 1) ]
문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/150370
내가 작성한 코드는 아래와 같다.
풀이 과정을 떠올린 방법은 아래와 같다.
1. 입력된 날짜와 약관 정보를 숫자로 변환하고, 이를 Map에 저장한다.
2. 각 개인정보에 대해 유효기간을 계산하고, 오늘 날짜와 비교해 파기 대상을 구한다.
3. 파기 대상인 개인정보의 번호를 배열로 반환한다.
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
int todayDate = changeDay(today);
// 약관, 유효기간 저장
Map<String, Integer> map = new HashMap<>();
for (String term : terms) {
String[] temp = term.split(" ");
map.put(temp[0], Integer.parseInt(temp[1]));
}
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i < privacies.length; i++) {
String[] info = privacies[i].split(" ");
String date = info[0];
String term = info[1];
int expireDay = changeDay(date) + (map.get(term) * 28);
// 파기 대상 여부 확인
if (expireDay <= todayDate) {
answer.add(i + 1);
}
}
// 리스트를 배열로 변환
int[] result = new int[answer.size()];
for (int i = 0; i < answer.size(); i++) {
result[i] = answer.get(i);
}
return result;
}
static int changeDay(String date) {
String[] dates = date.split("\\.");
int year = Integer.parseInt(dates[0]);
int month = Integer.parseInt(dates[1]);
int day = Integer.parseInt(dates[2]);
return (year * 12 * 28) + (month * 28) + day;
}
}
[풀이 과정]
1. changeDay() 메소드를 사용하여 주어진 날짜를 "년, 월, 일" 형식에서 날짜를 일(day) 단위의 숫자로 변환한다.
이때, terms 배열을 순회하면서 약관 종류와 유효기간을 Map에 저장한다. (key: 약관 이름, value: 유효 기간)
2. 각 항목에 대해 수집일자와 약관 종류를 분리한 후, 수집일자를 changeDay 메서드를 사용해 일 단위의 숫자로 변환한다/
3. 변환된 수집일자에 해당 약관의 유효기간을 더해 해당 개인정보의 만료일(expireDay)을 계산한다. 이때, 유효기간은 "달" 단위로 주어지므로, 이를 28일로 곱해 일 단위로 변환한다.
3. 오늘 날짜를 변환한 todayDate와 각 개인정보의 만료일 expireDay를 비교합니다. expireDay <= todayDate인 경우, 만료된 것이므로 파기 대상이 된다. 이러한 개인정보의 번호를 answer 리스트에 저장한다.
4. answer 리스트를 정수 배열로 변환하여 반환한다.
풀이 시간 : 30분