https://school.programmers.co.kr/learn/courses/30/lessons/150370
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
List<Integer> answer = new ArrayList<>(); // 정답 담을 리스트
int order = 0; // privacy 배열의 n번째 원소(1부터 시작)
StringTokenizer st = new StringTokenizer(today, ".");
Integer nowYear = Integer.parseInt(st.nextToken()); // 오늘 날짜 연도
Integer nowMonth = Integer.parseInt(st.nextToken()); // 오늘 날짜 월
Integer nowDay = Integer.parseInt(st.nextToken()); // // 오늘 날짜 일
Integer nowDate = (28 * 12 * nowYear) + (28 * nowMonth) + (nowDay); // 오늘 날짜를 총 날짜수로 변환: (YYYY * 28 * 12) + (MM * 12) + DD
Map<String, Integer> termMap = new HashMap<>(); // key: 등급, value: 유효 기간(MM)
for (String s : terms) { // termMap에 값 담기
String[] arr = s.split(" ");
termMap.put(arr[0], Integer.parseInt(arr[1]));
}
for (String privacy : privacies) { //
order++; // 현재 privacy가 privacies에서 몇 번째 원소인지 count
String[] array = privacy.split(" ");
st = new StringTokenizer(array[0], ".");
Integer fromYear = Integer.parseInt(st.nextToken()); // 수집 날짜 연도
Integer fromMonth = Integer.parseInt(st.nextToken()); // 수집 날짜 월
Integer fromDay = Integer.parseInt(st.nextToken()); // 수집 날짜 연도
String grade = array[1]; // 해당 정보의 약관
// 수집 날짜를 총 날짜수로 변환
Integer expiredDate = (fromYear * 28 * 12) + ((fromMonth + termMap.get(grade)) * 28) + fromDay - 1; // 유효기간 전까지만 보관가능하기 때문에 만료일 당일은 제외해야 되기 때문에 -1
if (nowDate > expiredDate) { // 오늘 총 날짜수가 만료 날짜보다 더 크다면
answer.add(order); // 폐가해야할 정보로 판단하고 해당 원소가 배열의 몇 번째 원소인지 담는다.
}
}
return answer.stream().mapToInt(i -> i).toArray(); // List인 answer을 반환 타입인 int[]로 변환하여 반환
}
}