Algorithms/Java

99클럽 코테 스터디 26일차 TIL + 개인정보 수집 유효기간 (java)

Jenn28 2024. 8. 16. 17:21

 

💡 문제

권장 시간

  • 1시간 30분

소요 시간

  • 1시간 15분

 

나의 풀이 코드

import java.util.*;

class Solution {
    StringTokenizer st;
    
    public int[] solution(String today, String[] terms, String[] privacies) {
        
        // String -> int
        st = new StringTokenizer(today, ".");
        int year = Integer.parseInt(st.nextToken()) - 2000; // 20
        int month = Integer.parseInt(st.nextToken()); // 1
        int days = Integer.parseInt(st.nextToken()); // 1

        // 오늘 날짜 days로 변환하기
        int todayTotal = (336 * (year + 1)) + (28 * month) + days;

        // terms에 따른 유효기간 days로 변환하여 저장
        Map<String, Integer> map = new HashMap<>();
        for (String term : terms) {
            st = new StringTokenizer(term, " ");
            map.put(st.nextToken(), Integer.parseInt(st.nextToken()) * 28);
        }
        
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < privacies.length; i++) {
            st = new StringTokenizer(privacies[i], ".");
            int year2 = Integer.parseInt(st.nextToken()) - 2000; // 19
            int month2 = Integer.parseInt(st.nextToken()); // 8
            
            StringTokenizer st2 = new StringTokenizer(st.nextToken(), " ");
            int days2 = Integer.parseInt(st2.nextToken()); // 2
            
            int privacyTotal = (336 * (year2 + 1)) + (28 * month2) + days2;
            
            String term = st2.nextToken();
            
            int expireDays = map.get(term);

            if ((privacyTotal + expireDays) <= todayTotal) {
                list.add(i + 1);
            }
        }
        
        // 오름차순 정렬
        Collections.sort(list);

        // ArrayList -> int[]
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

주요사항

StringTokenizer로 풀었는데 완벽하게 맞춰서 기분이 좋다.

다른 사람 풀이를 보니까 LocalDateTime 라이브러리로 풀기도 하고 split 배열과 함수로 좀 더 간단하게 푼 사람도 있었다.