class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
LinkedList<Integer> list = new LinkedList();
String[] date = today.split("\\.");
int year = Integer.parseInt(date[0]);
int month = Integer.parseInt(date[1]);
int day = Integer.parseInt(date[2]);
HashMap<String, Integer> map = new HashMap();
for(String term : terms){
String[] s = term.split(" ");
map.put(s[0], Integer.parseInt(s[1]));
}
int num = 1;
for(String privacy : privacies){
String[] sp = privacy.split(" ");
String p_term = sp[1];
String[] p_date = sp[0].split("\\.");
int p_year = Integer.parseInt(p_date[0]);
int p_month = Integer.parseInt(p_date[1]);
int p_day = Integer.parseInt(p_date[2]);
if(p_month + map.get(p_term) > 12) {
p_year += (p_month + map.get(p_term)) / 12;
p_month = (p_month + map.get(p_term)) % 12;
if(p_month == 0) {
p_year -= 1;
p_month = 12;
}
} else {
p_month += map.get(p_term);
}
if(p_year < year) list.add(num);
if(p_year == year) {
if(p_month < month) list.add(num);
if(p_month == month) {
if(p_day <= day) list.add(num);
}
}
num++;
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
처음 풀이에서는 연도 / 월 / 일 순으로 전부 비교했는데
사실 날짜는 상관이 크게 없고 그냥 하나의 수로 받아서 그 값이 큰지 작은지만 봐도 된다.
일은 바뀜이 없고 월만 바뀌므로 다음과 같이 수정할 수 있다.
int privacy_date = (p_year * 12 * 100) + ((p_month + map.get(p_term)) * 100) + p_day;
int today_date = (year * 12 * 100) + (month * 100) + day;
if(privacy_date <= today_date) list.add(num);
일은 2자리 수 이므로 영향이 안가게 * 100 을 하고
월만 비교할 수 있게 연도 * 12를 한 다음 비교하면 된다.
'코테 > 프로그래머스' 카테고리의 다른 글
포켓몬 Java 풀이 (0) | 2023.05.04 |
---|---|
완주하지 못한 선수 Java 풀이 (0) | 2023.05.04 |
[PCCP모의고사] 외톨이 알파벳 (Java ver.) (0) | 2022.12.16 |
[프로그래머스 Lv.2] 카펫 (kotlin ver.) (0) | 2022.12.14 |
[프로그래머스 Lv.1] 기사단원의 무기 (kotlin ver.) (0) | 2022.12.14 |