https://school.programmers.co.kr/learn/courses/30/lessons/150370
🌗문제 자세히보기
- 유효기간이 넘은 파기해야 할 개인정보를 찾는다.
- 한달은 28일이다.
1. 오늘 날씨의 년 , 달 , 월 을 "." 으로 분리해서 각각 저장한다. ( "." 은 그냥 사용하면 분리가 안된다 "\\." 사용해야한다!)
String[] date = today.split("\\.");
int y_now = Integer.parseInt(date[0]);
int m_now = Integer.parseInt(date[1]);
int d_now = Integer.parseInt(date[2]);
2. 각 약관종류의 유효기간이 저장되어 있는 terms 를 공백으로 분리해서 HashMap 에 약관타입 , 유효기간 으로 저장한다.
for(int i=0;i<terms.length;i++)
{
String term = terms[i];
String[] t= term.split(" ");
map.put(t[0], Integer.parseInt(t[1]));
}
3. 각 수집된 개인정보마다 유효기간이 넘었는지 확인한다.
- privacies 배열의 문장으로 공백으롭 분리해서 어떤 타입에 언제 수집된 개인정보인지 분리한다.
- 수집된 개인정보도 "." 으로 분리해서 년, 달,일로 분리한다.
- map 에서 개인정보의 타입을 찾아 유효기간이 몇개월인지 확인한다.
- 수집된 개인정보에 유효기간을 더하여 최종 보관기간을 구한다.
- 최종 보관기간을 구할때 한달 일수는 28일이고 한달은 12월까지 있는걸 주의하며 12월이 넘어가면 다음해로 넘기고 0일이 되면 28일로 다시 셋팅한다.
- 최종보관기간과 오늘을 비교해서 오늘보다 과거 일자면 파기한다.
//각 기간마다 각 유효기간 넘었는지 안넘었는지 확인
for(int i = 0;i<privacies.length;i++)
{
String privacy = privacies[i];
String[] p = privacy.split(" ");
String regDay = p[0];
String type = p[1];
int expiry = map.get(type); //유효기간 (n달)
String day[] = regDay.split("\\.");
int y_day = Integer.parseInt(day[0]);
int m_day = Integer.parseInt(day[1]);
int d_day = Integer.parseInt(day[2]);
//유효기간 만기일 구하기
m_day += expiry;
if(m_day >12)
{
y_day += m_day/12;
m_day = m_day % 12;
}
if(m_day == 0)
{
y_day -=1;
m_day = 12;
}
d_day -=1;
//한달은 마지막은 28일까지
if(d_day == 0)
{
d_day = 28;
m_day -= 1;
}
//만료일자와 오늘날짜비교
if(y_day == y_now)
{
if(m_day == m_now)
{
if(d_day < d_now)
{
result.add((i+1));
}
}
else if(m_day < m_now)
{
result.add((i+1));
}
}
else if(y_day < y_now)
{
result.add((i+1));
}
}
🌕최종코드
public static int[] solution(String today, String[] terms, String[] privacies) {
int[] answer = {};
String[] date = today.split("\\.");
int y_now = Integer.parseInt(date[0]);
int m_now = Integer.parseInt(date[1]);
int d_now = Integer.parseInt(date[2]);
HashMap<String,Integer> map = new HashMap<>();
ArrayList<Integer> result = new ArrayList<>();
//각 타입별 유효기간 저장
for(int i=0;i<terms.length;i++)
{
String term = terms[i];
String[] t= term.split(" ");
map.put(t[0], Integer.parseInt(t[1]));
}
//각 기간마다 각 유효기간 넘었는지 안넘었는지 확인
for(int i = 0;i<privacies.length;i++)
{
String privacy = privacies[i];
String[] p = privacy.split(" ");
String regDay = p[0];
String type = p[1];
int expiry = map.get(type); //유효기간 (n달)
String day[] = regDay.split("\\.");
int y_day = Integer.parseInt(day[0]);
int m_day = Integer.parseInt(day[1]);
int d_day = Integer.parseInt(day[2]);
//유효기간 만기일 구하기
m_day += expiry;
if(m_day >12)
{
y_day += m_day/12;
m_day = m_day % 12;
}
if(m_day == 0)
{
y_day -=1;
m_day = 12;
}
d_day -=1;
//한달은 마지막은 28일까지
if(d_day == 0)
{
d_day = 28;
m_day -= 1;
}
//만료일자와 오늘날짜비교
if(y_day == y_now)
{
if(m_day == m_now)
{
if(d_day < d_now)
{
result.add((i+1));
}
}
else if(m_day < m_now)
{
result.add((i+1));
}
}
else if(y_day < y_now)
{
result.add((i+1));
}
}
answer = new int[result.size()];
for(int i=0;i<answer.length; i++)
{
answer[i] = result.get(i);
}
Arrays.sort(answer); //오름차순
return answer;
}
'항해' 카테고리의 다른 글
[DAY36] JAVA 프로그래머스 N으로 표현 (0) | 2024.12.16 |
---|---|
[Day35]JAVA 백준 주사위 윷놀이(17825번) (0) | 2024.12.02 |
[Day33]JAVA 프로그래머스 신규 아이디 추천 (1) | 2024.11.29 |
[Day32]JAVA 백준 가장 긴 바이토닉 부분 수열(11054번) (0) | 2024.11.28 |
[Day31]JAVA 백준 줄세우기(2631번) (0) | 2024.11.27 |