💻 문제 출처 : 프로그래머스_개인정보 수집 유효기간
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
Map<Character, Integer> termsMap = new HashMap<>();
List<Integer> tempAnswer = new LinkedList<>();
int todayYear = Integer.parseInt(today.substring(0, 4));
int todayMonth = Integer.parseInt(today.substring(5, 7));
int todayDay = Integer.parseInt(today.substring(8, 10));
for(String s : terms) {
termsMap.put(s.charAt(0), Integer.parseInt(s.substring(2, s.length())));
}
for(int i = 0; i < privacies.length; i++) {
int changeMonth = termsMap.get(privacies[i].charAt(11));
int privacyYear = Integer.parseInt(privacies[i].substring(0, 4));
int privacyMonth = Integer.parseInt(privacies[i].substring(5, 7));
int privacyDay = Integer.parseInt(privacies[i].substring(8, 10));
privacyMonth = privacyMonth + changeMonth;
if(privacyDay == 1) {
privacyDay = 28;
privacyMonth--;
} else {
privacyDay = privacyDay - 1;
}
if(privacyMonth > 12) {
if(privacyMonth % 12 == 0) {
privacyYear += privacyMonth / 12 - 1;
privacyMonth = 12;
} else {
privacyYear += privacyMonth / 12;
privacyMonth = privacyMonth % 12;
}
}
if(todayYear > privacyYear) {
tempAnswer.add(i + 1);
continue;
}
if(todayYear == privacyYear && todayMonth > privacyMonth) {
tempAnswer.add(i + 1);
continue;
}
if(todayYear == privacyYear && todayMonth == privacyMonth && todayDay > privacyDay) {
tempAnswer.add(i + 1);
continue;
}
}
int[] answer = new int[tempAnswer.size()];
for(int i = 0; i < tempAnswer.size(); i++) {
answer[i] = tempAnswer.get(i);
}
return answer;
}
}
📌 문제 풀이 설명
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
List<Integer> answer = new ArrayList<>();
Map<String, Integer> termMap = new HashMap<>();
int date = getDate(today);
for (String s : terms) {
String[] term = s.split(" ");
termMap.put(term[0], Integer.parseInt(term[1]));
}
for (int i = 0; i < privacies.length; i++) {
String[] privacy = privacies[i].split(" ");
if (getDate(privacy[0]) + (termMap.get(privacy[1]) * 28) <= date) {
answer.add(i + 1);
}
}
return answer.stream().mapToInt(integer -> integer).toArray();
}
private int getDate(String today) {
String[] date = today.split("\\.");
int year = Integer.parseInt(date[0]);
int month = Integer.parseInt(date[1]);
int day = Integer.parseInt(date[2]);
return (year * 12 * 28) + (month * 28) + day;
}
}
📌 문제 풀이 설명