728x90
코드 힌트
- 약관 유효기간 매핑:
- 주어진 약관 종류와 그에 따른 유효기간을 매핑하여, 각 약관이 몇 개월 동안 유효한지 저장합니다.
- 이 매핑은 나중에 개인정보의 유효기간을 계산할 때 사용됩니다.
- 유효기간 계산 및 만료 확인:
- 각 개인정보의 수집일자와 약관 종류를 바탕으로, 해당 개인정보가 오늘 날짜를 기준으로 만료되었는지를 확인합니다.
- 만약 유효기간이 지나면 만료된 것으로 간주하고 결과 리스트에 해당 개인정보의 인덱스를 저장합니다.
- 개인정보를 저장할 수 있는 달의 정수의 범위는 1~100입니다. month, year를 잘 관리하셔야합니다.
- 결과 배열 생성:
- 만료된 개인정보의 인덱스를 저장한 리스트를 배열로 변환하여 최종 결과로 반환합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
// 약관의 종류와 유효기간을 매핑하는 HashMap 생성
HashMap<String, Integer> termDurationMap = initTermDurationMap(terms);
List<Integer> list = new ArrayList<>();
// 각 개인정보에 대해 유효기간이 지났는지 확인
for (int i = 0; i < privacies.length; i++) {
String[] privacyInfo = privacies[i].split(" ");
if (isExpired(privacyInfo, today, termDurationMap)) {
list.add(i + 1); // 만료된 경우 해당 번호 추가
}
}
// 결과 배열 생성
int[] result = new int[list.size()];
for (int i = 0; i < result.length; i++) {
result[i] = list.get(i);
}
return result;
}
// 유효 기간이 지났는지 여부를 확인하는 메서드
public boolean isExpired(String[] privacyInfo, String today, HashMap<String, Integer> termDurationMap) {
// 오늘 날짜 분할 (년, 월, 일)
String[] todayParts = today.split("\\.");
int todayYear = Integer.parseInt(todayParts[0]);
int todayMonth = Integer.parseInt(todayParts[1]);
int todayDay = Integer.parseInt(todayParts[2]);
// 수집 일자 분할 (년, 월, 일)
String[] startDateParts = privacyInfo[0].split("\\.");
int startYear = Integer.parseInt(startDateParts[0]);
int startMonth = Integer.parseInt(startDateParts[1]);
int startDay = Integer.parseInt(startDateParts[2]);
// 약관 종류에 따른 유효기간 계산 (월 단위)
int validityPeriod = termDurationMap.get(privacyInfo[1]);
startMonth += validityPeriod; // 시작 월에 유효기간 더하기
while (startMonth > 12) {
startMonth -= 12; // 12월을 넘으면 다음 해로 넘기기
startYear++;
}
// 유효기간이 지났는지 확인
if (todayYear > startYear) { // 오늘의 연도가 더 크면 만료
return true;
} else if (todayYear == startYear && todayMonth > startMonth) { // 같은 연도에서 오늘의 월이 더 크면 만료
return true;
} else if (todayYear == startYear && todayMonth == startMonth && todayDay >= startDay) { // 같은 월에서 오늘의 일이 같거나 더 크면 만료
return true;
}
return false; // 만료되지 않은 경우
}
// 약관 종류와 기간을 매핑하는 메서드
public HashMap<String, Integer> initTermDurationMap(String[] terms) {
HashMap<String, Integer> map = new HashMap<>();
// 약관과 유효기간을 분할하여 맵에 저장
for (String term : terms) {
String[] termParts = term.split(" ");
String termType = termParts[0]; // 약관 종류
int durationInMonths = Integer.parseInt(termParts[1]); // 유효기간 (월 단위)
map.put(termType, durationInMonths);
}
return map;
}
}
728x90
'프로그래머스(Java) > Level 1' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 (0) | 2024.08.29 |
---|---|
[프로그래머스] 바탕화면 정리 (0) | 2024.08.29 |
[프로그래머스] 공원 산책 (0) | 2024.08.27 |
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2024.08.26 |
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.08.21 |