개발 창고/Algorithm

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

로이제로 2024. 2. 21. 08:00
반응형


이 버전에서는 TOC를 지원하지 않습니다. (ex. 모바일)

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.


풀이

 제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.

import java.util.HashMap;
import java.util.ArrayList;

class Solution {
    public int[] solution(String today, String[] terms, String[] privacies) {
        ArrayList<Integer> answer = new ArrayList<>();
        
        // Step. terms를 map으로 변환
        HashMap<String, Integer> tmap = new HashMap<>();
        for(String term : terms){
            tmap.put(term.split(" ")[0], Integer.parseInt(term.split(" ")[1]));
        }
        System.out.println(tmap);
        
        // Step. today를 Int형으로 변환
        // 28일까지로 가정하므로, 1y = 12 * 28d, 1m = 28d
        // dot(.)은 \\.로 split해야 됨
        int nToday = Integer.parseInt(today.split("\\.")[0]) * 12 * 28
                   + Integer.parseInt(today.split("\\.")[1]) * 28
                   + Integer.parseInt(today.split("\\.")[2]);
        // System.out.println(today + " " + nToday);
        
        // Step. 개인정보 중 유효기간이 지난 항목만 조회
        for(int i = 0; i < privacies.length; i++){
            String privacy  = privacies[i];
            String regdate  = privacy.split(" ")[0];
            String type     = privacy.split(" ")[1];
            
            int nRegdate = Integer.parseInt(regdate.split("\\.")[0]) * 12 * 28
                         + Integer.parseInt(regdate.split("\\.")[1]) * 28
                         + Integer.parseInt(regdate.split("\\.")[2]);
            int nEnddate = nRegdate + tmap.get(type) * 28;
            // System.out.println(regdate + " " + nRegdate + " " + nEnddate);
            
            // Step. 등록일 + 유형별 유효기간이 오늘 날짜 이전이거나 같은 경우 파기 대상
            if(nToday >= nEnddate){
                // System.out.println(i + 1);
                answer.add(i + 1);
            }
        }
        
        // Step. ArrayList를 int[] 배열로 변환하여 반환
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

코드 실행 결과
제출 결과

반응형