새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 개인정보 수집 유효기간

  • -
728x90
반응형

 

이번 문제는 각 개인정보의 유효기간을 계산하여, 주어진 날짜와 비교 후 지워야 할 데이터를 선별하는 것이다.

 

이번 문제를 풀기위해 DateTimeFormatter와 LocalDate 객체를 사용했다.

 

유효기간 Map객체에 매핑 : 유효기간을 terms 배열에서 termMap에 저장한다. Key는 약관, value는 유효기간으로 저장한다.

Map<String, Integer> termMap = new HashMap<>();
for(int i = 0; i < terms.length; i++) {
    termMap.put(terms[i].split(" ")[0], Integer.parseInt(terms[i].split(" ")[1]));
}

 

개인정보 검토 및 파기 대상 식별 

  • 개인정보의 약관 종류와 수집 일자를 파악한다.
  • 해당 약관의 유효기간을 termMap에서 조회하여 수집 일자에 추가한다.
  • 유효기간이 오늘 날짜 이전이거나 같은 경우, 해당 개인정보를 파기 대상으로 분류한다.
for(int i = 1; i <= privacies.length; i++) {
    String type = privacies[i - 1].split(" ")[1];
    String date = privacies[i - 1].split(" ")[0];
    int limitTerm = termMap.get(type);
    LocalDate limit = LocalDate.parse(date, formatter).plusMonths(limitTerm);
    if(!limit.isAfter(criteria)) {
        deleteList.add(i);
    }
}

 

결과 반환 : 파기해야할 개인정보 번호를 리스트에서 배열로 변환해 반환한다.

int[] answer = new int[deleteList.size()];
for(int i = 0; i < deleteList.size(); i++) {
    answer[i] = deleteList.get(i);
}
return answer;

 

이번 문제를 풀 때의 핵심은 DateTimeFormatter와 LocalDate를 활용해 비교 로직을 빠르게 처리하는 것이라고 생각한다.

 

전체코드는 아래와 같다.

import java.time.*;
import java.time.format.*;
import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
    
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
        LocalDate criteria = LocalDate.parse(today, formatter);
        ArrayList<Integer> deleteList = new ArrayList<>();
        Map<String, Integer> termMap = new HashMap<>();
        for(int i = 0; i < terms.length; i++) {
            termMap.put(terms[i].split(" ")[0], Integer.parseInt(terms[i].split(" ")[1]));
        }
        for(int i = 1; i <= privacies.length; i++) {
            String type = privacies[i - 1].split(" ")[1];
            String date = privacies[i - 1].split(" ")[0];
            int limitTerm = termMap.get(type);
            LocalDate limit = LocalDate.parse(date, formatter);
            limit = limit.plusMonths(limitTerm);
            if(!limit.isAfter(criteria)) {
                deleteList.add(i);
            }
        }
        int[] answer = new int[deleteList.size()];
        for(int i = 0; i < deleteList.size(); i++) {
            answer[i] = deleteList.get(i);
        }
        return answer;
    }
}
728x90
반응형

'Programmers > Lv.1' 카테고리의 다른 글

프로그래머스 - 데이터 분석  (1) 2024.04.01
프로그래머스 - 바탕화면  (0) 2024.04.01
프로그래머스 - 달리기 경주  (0) 2024.03.31
프로그래머스 - 공원 산책  (1) 2024.03.31
프로그래머스 - 붕대 감기  (0) 2024.03.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.