ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스/JAVA] 개인정보 수집 유효기간 - 2023 KAKAO BLIND RECRUITMENT
    ETC/Algorithm 2023. 6. 9. 10:05

    풀이

    일일이 파싱

    문자열로 받아서 일일이 파싱하는 방법

    한 달은 28일로 고정

    입력 값을 1년=12달 1달= 28일로 변환해서 비교하는 방법

    6월에 18개월 뒤면?

    24월로 12로 나머지 연산을 하게 되면 0이 나오게 된다. 주의하자.

    코드

    제출 코드

    import java.util.*;
    
    class Solution {
        static HashMap<String, Integer> term = new HashMap<>();
    
        public int[] solution(String today, String[] terms, String[] privacies) {
    
            ArrayList<String> parsedToday = new ArrayList<>();
    
            ArrayList<Integer> answer = new ArrayList<>();
    
            StringTokenizer st = new StringTokenizer(today, ".");
    
            for (int i = 0; i < 3; i++){
                parsedToday.add(st.nextToken());
            }
    
            //임시 출력
            // for (String s : parsedToday){
            //         System.out.println(s);
            // }
    
            for(String str : terms){
                st = new StringTokenizer(str, " ");
                term.put(st.nextToken(), Integer.parseInt(st.nextToken()));
            }
    
            for(int i = 0; i < privacies.length; i++){
                st = new StringTokenizer(privacies[i], ". ");
                ArrayList<String> parsedPriv = new ArrayList<>();
    
                for (int j = 0; j < 4 ; j++){
                    parsedPriv.add(st.nextToken());
                }
                if(!checkDay(parsedToday, parsedPriv)){
                    answer.add(i+1);
                }
    
            }
    
            int[] result = new int[answer.size()];
            for(int i = 0; i < result.length ; i++){
                result[i] = answer.get(i);
            }
    
            return result;
        }
    
        static boolean checkDay(ArrayList<String> today, ArrayList<String> privDay){
    
            int todayY = Integer.parseInt(today.get(0));
            int todayM = Integer.parseInt(today.get(1));
            int todayD = Integer.parseInt(today.get(2));
    
            int privY = Integer.parseInt(privDay.get(0));
            int privM = Integer.parseInt(privDay.get(1)) + term.get(privDay.get(3));
            int privD = Integer.parseInt(privDay.get(2));
    
            if(privM > 12){
                if(privM % 12 == 0){
                    privY += (privM / 12) - 1;
                    privM = 12;
                } else {
                    privY += (privM / 12);
                    privM %= 12;
                }
            }
    
            int[] todayA = {todayY, todayM, todayD};
            int[] priv = {privY, privM, privD};
    
            if(todayY > privY) {
                return false;
            }
            if(todayY == privY && todayM > privM) {
                return false;
            }
            if(todayY == privY && todayM == privM && todayD >= privD) {
                return false;
            }
            return true;
        }
    }

    댓글

Designed by black7375.