본문 바로가기

코테/프로그래머스

2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효기간 (Java.ver)

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        LinkedList<Integer> list = new LinkedList();
        String[] date = today.split("\\.");
        int year = Integer.parseInt(date[0]);
        int month = Integer.parseInt(date[1]);
        int day = Integer.parseInt(date[2]);

        HashMap<String, Integer> map = new HashMap();

        for(String term : terms){
            String[] s = term.split(" ");
            map.put(s[0], Integer.parseInt(s[1]));
        }

        int num = 1;
        for(String privacy : privacies){
            String[] sp = privacy.split(" ");
            String p_term = sp[1];
            String[] p_date = sp[0].split("\\.");
            int p_year = Integer.parseInt(p_date[0]);
            int p_month = Integer.parseInt(p_date[1]);
            int p_day = Integer.parseInt(p_date[2]);

            if(p_month + map.get(p_term) > 12) {
                p_year += (p_month + map.get(p_term)) / 12;
                p_month = (p_month + map.get(p_term)) % 12;
                if(p_month == 0) {
                    p_year -= 1;
                    p_month = 12;
                }
            } else {
                p_month += map.get(p_term);
            }

            if(p_year < year) list.add(num);
            if(p_year == year) {
                if(p_month < month) list.add(num);
                if(p_month == month) {
                    if(p_day <= day) list.add(num);
                }
            }

            num++;
        }

        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

처음 풀이에서는 연도 / 월 / 일 순으로 전부 비교했는데

사실 날짜는 상관이 크게 없고 그냥 하나의 수로 받아서 그 값이 큰지 작은지만 봐도 된다.

일은 바뀜이 없고 월만 바뀌므로 다음과 같이 수정할 수 있다.

int privacy_date = (p_year * 12 * 100) + ((p_month + map.get(p_term)) * 100) + p_day;
int today_date = (year * 12 * 100) + (month * 100) + day;

if(privacy_date <= today_date) list.add(num);

일은 2자리 수 이므로 영향이 안가게 * 100 을 하고

월만 비교할 수 있게 연도 * 12를 한 다음 비교하면 된다.