알고리즘

[프로그래머스 카카오 2023기출문제] 개인정보 수집 유효기간

begong 2024. 3. 27. 15:51
반응형

자바의 여러기능을 잘 아는지 테스트하는 문제였다.

parsing하는것이 주요 관건

import java.util.*;
class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        int count = 0;
        boolean[] check = new boolean[privacies.length];
        HashMap<String,Integer> map = new HashMap<>();
        StringTokenizer st;
        for(String s : terms){
            st = new StringTokenizer(s);
            String key = st.nextToken();
            int value = Integer.parseInt(st.nextToken());
            map.put(key,value);
        }
        st = new StringTokenizer(today,".");
        int todayYear = Integer.parseInt(st.nextToken());
        int todayMonth = Integer.parseInt(st.nextToken());
        int todayDate = Integer.parseInt(st.nextToken());
        int idx = 0;
        for(String s : privacies){
            st = new StringTokenizer(s);
            String dateString = st.nextToken();
            String term = st.nextToken();
            int termMonth = map.get(term);
            st = new StringTokenizer(dateString,".");
            int year = Integer.parseInt(st.nextToken());
            int month = Integer.parseInt(st.nextToken());
            int date = Integer.parseInt(st.nextToken());
            
            month += termMonth;
            date -=1;
            if(month>12){
                year += month / 12;
                month = month %12;
            }
            if(date <1){
                date = 28;
                month-=1;
            }
            if(month <1){
                year-=1;
                month=12;
            }
            
            if(todayYear>year){
                count += 1;
                check[idx] = true;
            }else if(todayYear==year && todayMonth>month){
                count += 1;
                check[idx] = true;
            }else if(todayYear==year && todayMonth==month &&todayDate>date){
                count += 1;
                check[idx] = true;
            }
            idx++;
        }
        
        int[] answer = new int[count];
        idx=0;
        
        for(int i = 0; i<privacies.length;i++){
            if(check[i]){
                answer[idx] = i+1;
                idx++;
            }
        }
        return answer;
    }
}
반응형