99클럽 코테 스터디 26일차 TIL / [프로그래머스] 개인정보 수집 유효기간

전종원·2024년 8월 16일
0
post-custom-banner

오늘의 학습 키워드


시뮬레이션

문제


https://school.programmers.co.kr/learn/courses/30/lessons/150370

  • 플랫폼: 프로그래머스
  • 문제명: 개인정보 수집 유효기간
  • 난이도: Lv1

풀이


import java.util.*;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        Map<String, Integer> termMap = new HashMap<>();
        
        for(String term : terms) {
            String[] split = term.split(" ");
            
            termMap.put(split[0], Integer.parseInt(split[1]) * 28);
        }
        
        List<PersonalInfo> personalInfos = new ArrayList<>();
        for(String privacy : privacies) {
            String[] split = privacy.split(" ");
            int collectedDays = dateToDays(split[0]);
            String type = split[1];
            personalInfos.add(new PersonalInfo(collectedDays, type));
        }
        
        int todayDays = dateToDays(today);
        List<Integer> ansList = new ArrayList<>();
        for(int i=0; i<personalInfos.size(); i++) {
            PersonalInfo personalInfo = personalInfos.get(i);
            int expireDays = termMap.get(personalInfo.type);
            
            if(personalInfo.collectedDays + expireDays <= todayDays) {
                ansList.add(i + 1);
            }
        }
        
        return ansList.stream().mapToInt(Integer::intValue).toArray();
    }
    
    public int dateToDays(String date) {
        String[] split = date.split("\\.");
        int year = Integer.parseInt(split[0]);
        int month = Integer.parseInt(split[1]);
        int day = Integer.parseInt(split[2]);
        
        return day + month * 28 + year * 12 * 28;
    }
    
    static class PersonalInfo {
        int collectedDays; // day 환산
        String type;

        public PersonalInfo(int collectedDays, String type) {
            this.collectedDays = collectedDays;
            this.type = type;
        }
    }
}

접근

  • 문제 조건을 그대로 따라 구현하기만 하면 되는 간단한 시뮬레이션 문제였습니다.
  • 날짜 계산을 간단화하기 위해 년, 월을 모두 day 기준으로 환산하여 풀이했습니다.
    public int dateToDays(String date) {
        String[] split = date.split("\\.");
        int year = Integer.parseInt(split[0]);
        int month = Integer.parseInt(split[1]);
        int day = Integer.parseInt(split[2]);
        
        return day + month * 28 + year * 12 * 28;
    }
  • 개인정보 수집 일자 + 유효기간보다 오늘 날짜가 더 크다면, 파기해야 할 개인정보이므로, 이를 찾아 배열에 추가하여 리턴합니다.
    List<Integer> ansList = new ArrayList<>();
    for(int i=0; i<personalInfos.size(); i++) {
        PersonalInfo personalInfo = personalInfos.get(i);
        int expireDays = termMap.get(personalInfo.type);
        
        if(personalInfo.collectedDays + expireDays <= todayDays) {
            ansList.add(i + 1);
        }
    }

소요 시간

30분

post-custom-banner

0개의 댓글