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;
}
}
너무 구현에 집중한 나머지 가독성이 엉망이네요.. 나중에 더 가독성 있게 다시 작성해야 할 것 같습니다.
'백준 및 프로그래머스 > 프로그래머스 LV 1' 카테고리의 다른 글
| [PCCE 기출문제] 10번 / 공원 - JAVA (0) | 2025.03.02 |
|---|---|
| 2025 프로그래머스 코드챌린지 1차 예선 - 유연근무제 -JAVA (1) | 2025.02.27 |
| 2021 KAKAO BLIND RECRUITMENT신규 아이디 추천 - JAVA (0) | 2025.02.25 |
| 2020 카카오 인턴십 - 키패드 누르기 - JAVA (1) | 2025.02.24 |
| 2022 KAKAO TECH INTERNSHIP-성격 유형 검사하기- JAVA (0) | 2025.02.23 |