💡 문제
권장 시간
- 1시간 30분
소요 시간
- 1시간 15분
나의 풀이 코드
import java.util.*;
class Solution {
StringTokenizer st;
public int[] solution(String today, String[] terms, String[] privacies) {
// String -> int
st = new StringTokenizer(today, ".");
int year = Integer.parseInt(st.nextToken()) - 2000; // 20
int month = Integer.parseInt(st.nextToken()); // 1
int days = Integer.parseInt(st.nextToken()); // 1
// 오늘 날짜 days로 변환하기
int todayTotal = (336 * (year + 1)) + (28 * month) + days;
// terms에 따른 유효기간 days로 변환하여 저장
Map<String, Integer> map = new HashMap<>();
for (String term : terms) {
st = new StringTokenizer(term, " ");
map.put(st.nextToken(), Integer.parseInt(st.nextToken()) * 28);
}
List<Integer> list = new ArrayList<>();
for (int i = 0; i < privacies.length; i++) {
st = new StringTokenizer(privacies[i], ".");
int year2 = Integer.parseInt(st.nextToken()) - 2000; // 19
int month2 = Integer.parseInt(st.nextToken()); // 8
StringTokenizer st2 = new StringTokenizer(st.nextToken(), " ");
int days2 = Integer.parseInt(st2.nextToken()); // 2
int privacyTotal = (336 * (year2 + 1)) + (28 * month2) + days2;
String term = st2.nextToken();
int expireDays = map.get(term);
if ((privacyTotal + expireDays) <= todayTotal) {
list.add(i + 1);
}
}
// 오름차순 정렬
Collections.sort(list);
// ArrayList -> int[]
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
주요사항
StringTokenizer로 풀었는데 완벽하게 맞춰서 기분이 좋다.
다른 사람 풀이를 보니까 LocalDateTime 라이브러리로 풀기도 하고 split 배열과 함수로 좀 더 간단하게 푼 사람도 있었다.