[카카오] 개인정보 수집 유효기간 (Java)

SSO·2023년 9월 8일
0

알고리즘

목록 보기
46/48

🍇 문제

2023 KAKAO BLIND RECRUITMENT Lv1. 개인정보 수집 유효기간
https://school.programmers.co.kr/learn/courses/30/lessons/150370

수집된 개인정보 중 파기해야 할 정보의 번호를 구해야 한다.
개인정보의 수집 일로부터 기간이 지난 정보는 파기한다.

  • String today : 오늘 날짜 (yyyy.MM.dd)
  • String[] terms : 약관 정보(종류, 기간)
  • String[] privacies : 수집한 개인정보(수집 일, 약관 종류)

🍇 풀이

  1. 약관 정보를 Map으로 관리한다.
  2. 개인정보 수집 일로부터 특정 보관 기간이 지난 날짜를 계산한다.
  3. 기간이 지난 개인정보 번호를 저장 및 반환한다.

단순히 노가다를 하면 풀 수 있는 문제였다. 하지만 검색을 통해 좀 더 효율적으로 계산할 수 있는 방법을 찾았다. 년(year) 수와 월(month) 수를 일(day) 수로 치환하는 것이다. (한 달은 28이라고 고정되어 있으므로)

처음에 today.split(".")을 통해 년,월,일을 구해내려 했는데 split이 안됐다🤔 찾아보니 today.split("\\.")으로 분리해야 하더라! 그 이유는 split은 정규식을 받는데 정규식에서 마침표(.)는 임의의 문자를 의미하기 때문! (https://hianna.tistory.com/618)


🍇 전체 코드

import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        int day = getDay(today); // 금일 기준 일 수
        
        Map<String, Integer> map = new HashMap<>();
        for (String term : terms) { // 약관 정보 map으로 관리
            String[] arr = term.split(" ");
            map.put(arr[0], Integer.valueOf(arr[1]));
        }
        
        ArrayList<Integer> al = new ArrayList<>();
        
        for (int i = 0; i < privacies.length; i++) {
            String privacy = privacies[i];
            String[] arr = privacy.split(" ");
            
            // 기간 지나면 파기
            if (day >= getDay(arr[0]) + map.get(arr[1]) * 28) {
                al.add(i + 1); // 0부터 시작하므로
            }
        }
        
        int[] answer = new int[al.size()];
        for (int i = 0; i < al.size(); i++) {
            answer[i] = al.get(i);
        }
        
        return answer;
    }
    
    private int getDay(String today) { // 일수 구하기
        String[] arr = today.split("\\.");
        int y = Integer.valueOf(arr[0]);
        int m = Integer.valueOf(arr[1]);
        int d = Integer.valueOf(arr[2]);
        return (y * 12 * 28) + (m * 28) + d;
    }
}

🍇 Comment

  • split과 마침표(.)의 관계에 대해 새롭게 배웠다.
  • 문제 풀이 중 가독성을 위해서라도 private method로 분리하는 방식을 습관화 하자!
profile
쏘's 코딩·개발 일기장

0개의 댓글