본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 개인정보 수집 유효기간

by 현장 2026. 3. 26.

-Code

import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        // 타입별 유효 기간 저장
        Map<Character, Integer> typeAndMonth = new HashMap<>();
        for (int i = 0; i < terms.length; i++) {
            StringTokenizer st = new StringTokenizer(terms[i]);
            char type = st.nextToken().charAt(0);
            int month = Integer.parseInt(st.nextToken());
            typeAndMonth.put(type, month);
        }
        // 유효 기간이 넘지 않은 것 저장
        int todayTotalDays = getTotalDays(today);
        ArrayList<Integer> answer = new ArrayList<>();
        for (int i = 0; i < privacies.length; i++) {
            StringTokenizer st = new StringTokenizer(privacies[i]);
            String date = st.nextToken();
            char type = st.nextToken().charAt(0);
            // 검사할 기간에 유효 기간을 더해서 확인
            int totalDays = getTotalDays(date) + typeAndMonth.get(type) * 28;
            // 현재 날짜보다 검사할 기간이 작으면 추가
            if (totalDays <= todayTotalDays) {
                answer.add(i + 1);
            }
        }
        return answer.stream().mapToInt(i -> i).toArray();
    }
    
    private int getTotalDays(String date) {
        // 날짜를 일수로 변경
        int[] dateChange = new int[3];
        int idx = 0;
        for (String el : date.split("\\.")) {
            dateChange[idx++] = Integer.parseInt(el);
        }
        return (dateChange[0] * 12) * 28 + (dateChange[1] - 1) * 28 + dateChange[2];
    }
}