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

이한솔·2023년 10월 25일
0

프로그래머스_레벨1

목록 보기
63/65
post-thumbnail

✨️ 문제 설명

: 고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다.

오늘 날짜를 의미하는 문자열 today, 약관의 유효기간을 담은 1차원 문자열 배열 terms와 수집된 개인정보의 정보를 담은 1차원 문자열 배열 privacies가 매개변수로 주어집니다. 이때 파기해야 할 개인정보의 번호를 오름차순으로 1차원 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요.

 -> 자세한 내용 보러가기

🎲 자바 풀이

import java.util.*;
class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        //파기할 약관을 저장할 리스트 -> 추후에 배열로 리턴해야함
        List<Integer> list = new ArrayList<>();
        
        //약관의 종류와 유효기간을 저장할 Map 생성 -> 유효기간을 전부 일로 변경해서 저장한다.
        Map<String, Integer> map = new HashMap<>();
        for(String term : terms){
            String[] arr = term.split(" "); //띄어쓰기를 기준으로 구분
            //모든 달은 28일까지 있다고 가정 (문제설명)
            map.put(arr[0], Integer.parseInt(arr[1]) * 28);
        }
        
        //파기해야하는 약관인지 아닌지 확인해야함
        //-> privacies의 날짜를 전부 일로 변경 후 더함 + terms의 날짜
        //-> today의 날짜를 전부 일로 변경 후 더함
        //만약 today보다 크면 파기해야하는 약관으로 추가해야함
        for(int idx = 0; idx < privacies.length; idx++){
            String[] arr = privacies[idx].split(" ");
            String[] days = arr[0].split("\\.");
            
            //약관을 받은 날짜
            int pDays = (Integer.parseInt(days[0]) * 12 * 28)
                + (Integer.parseInt(days[1]) * 28)
                + (Integer.parseInt(days[2]))
                + map.get(arr[1]);
            
            //오늘날짜
            String[] todays = today.split("\\.");
            int tDays = (Integer.parseInt(todays[0]) * 12 * 28)
                + (Integer.parseInt(todays[1]) * 28)
                + (Integer.parseInt(todays[2]));
            
            if(tDays >= pDays) list.add(idx + 1);
        }
        
        int[] answer = list.stream().mapToInt(i -> i).toArray();
        return answer;
    }
}

풀이 설명

: 연도와 월이 달라지는 것을 어떻게 비교할까 하다가 일로 전부 변환해서 풀었다. (문제 설명 상 모든 달을 28일로 가정)
: 약관을 받은 날짜에, 해당 유효기관을 일수로 변환하여 더한 후 이 값이 현재 값보다 작으면 유효기간이 지났으므로 해당 약관의 번호를 list에 저장 후, 배열로 변환하여 반환한다.
profile
개인 공부용

0개의 댓글