2023 KAKAO BLIND RECRUITMENT - 개인정보 수집 유효기간 - JAVA

2025. 2. 26. 15:37백준 및 프로그래머스/프로그래머스 LV 1

문제 설명 

제한사항

  • today는 "YYYY.MM.DD" 형태로 오늘 날짜를 나타냅니다.
  • 1 ≤ terms의 길이 ≤ 20
    • terms의 원소는 "약관 종류 유효기간" 형태의 약관 종류와 유효기간을 공백 하나로 구분한 문자열입니다.
    • 약관 종류는 A~Z중 알파벳 대문자 하나이며, terms 배열에서 약관 종류는 중복되지 않습니다.
    • 유효기간은 개인정보를 보관할 수 있는 달 수를 나타내는 정수이며, 1 이상 100 이하입니다.
  • 1 ≤ privacies의 길이 ≤ 100
    • privacies[i]는 i+1번 개인정보의 수집 일자와 약관 종류를 나타냅니다.
    • privacies의 원소는 "날짜 약관 종류" 형태의 날짜와 약관 종류를 공백 하나로 구분한 문자열입니다.
    • 날짜는 "YYYY.MM.DD" 형태의 개인정보가 수집된 날짜를 나타내며, today 이전의 날짜만 주어집니다.
    • privacies의 약관 종류는 항상 terms에 나타난 약관 종류만 주어집니다.
  • today와 privacies에 등장하는 날짜의 YYYY는 연도, MM은 월, DD는 일을 나타내며 점(.) 하나로 구분되어 있습니다.
    • 2000 ≤ YYYY ≤ 2022
    • 1 ≤ MM ≤ 12
    • MM이 한 자릿수인 경우 앞에 0이 붙습니다.
    • 1 ≤ DD ≤ 28
    • DD가 한 자릿수인 경우 앞에 0이 붙습니다.
  • 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어집니다.

입출력 예

"2022.05.19" ["A 6", "B 12", "C 3"] ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] [1, 3]
"2020.01.01" ["Z 3", "D 5"] ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] [1, 4, 5]

문제 설명
단순한 구현 문제라고 생각합니다. 예를 들어 A,B,C에 맞게 유효기간을 설정해 준 후 처음에 제공해주는 개인정보 수집 기간보다 기간이 짧으면 리스트 안에 번호를 적어주면 쉽게 풀 수 있습니다.

 

전체 코드

import java.util.*;
import java.io.*;
class Solution {
    public List<Integer> solution(String today, String[] terms, String[] privacies) throws IOException {
        //today 숫자 배열로 만들어줌.
        String answer ="";
        List<Integer> list = new ArrayList<>();
        Map<Integer,Integer> map = new HashMap<>();
        int[] todays = new int[3];
        int idx = 0 ;
        for(int i = 0; i<today.length(); i++){
            char word = today.charAt(i);
            if(word == '.'){
                todays[idx] = Integer.parseInt(answer);
                idx++;
                answer = "";
            }else{
                answer+=word;
            }
        }
        todays[idx] = Integer.parseInt(answer);
        
        //달력 map에 저장
        for(int i = 1; i<=12; i++){
            map.put(i,28);
        }
        
        //로직 작성 
        int count = 0 ;
        for(int i = 0; i<privacies.length; i++){
            String[] date = privacies[i].split(" ");
            String alpha = date[1];
            count = 0 ;
            for(int j = 0; j<terms.length; j++){
                String[] term = terms[j].split(" ");
                if(term[0].equals(alpha)){
                    count = Integer.parseInt(term[1]) * 28;
                    int[] day = new int[3];
                    String date1 = date[0];
                    String num ="";
                    int idx1 = 0 ;
                    for(int k = 0; k<date1.length(); k++){
                        if(date1.charAt(k) =='.'){
                            day[idx1] = Integer.parseInt(num);
                            num ="";
                            idx1++;
                        }else{
                            num+=date1.charAt(k);
                        }
                    }
                    day[idx1] = Integer.parseInt(num);
                    // for(Integer m:day){
                    //     System.out.print(m+" ");
                    // }
                    System.out.println();
                    while (count > 0 ){
                        day[2] ++ ;
                        if(map.get(day[1]) < day[2]){
                            day[1] ++;
                            day[2] = 1;
                            if(day[1]>12){
                                day[1] = 1;
                                day[0]++;
                            }
                        }
                        count--;
                    }
                    // for(int s = 0 ; s<3; s++){
                    //     System.out.print(day[s]+" ");
                    // }
                    // System.out.println();
                    
                    if(day[0] < todays[0]){
                        list.add(i+1);
                    }
                    if(day[0] == todays[0]){
                        if(day[1] < todays[1]){
                            list.add(i+1);
                        }
                    }
                    if(day[0] == todays[0]){
                        if(day[1] == todays[1]){
                            if(day[2] < todays[2]){
                                list.add(i+1);
                            }
                        }
                    }
                    if(day[0] == todays[0] && day[1] == todays[1] && day[2] == todays[2]){
                        list.add(i+1);
                    }
                    
                }
            }
        }
        return list;
    }
}

너무 구현에 집중한 나머지 가독성이 엉망이네요.. 나중에 더 가독성 있게 다시 작성해야 할 것 같습니다.