728x90
반응형
1. 오늘의 학습 문제
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370#
코드
import java.util.*;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
ArrayList<Integer> answer=new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
for (String term : terms) { //약관 종류: 유효기간(int) 맵 생성, 찾는 복잡도 O(1)
String[] arr = term.split(" ");
map.put(arr[0], Integer.parseInt(arr[1]));
}
int cnt=1;
int todayInt = Integer.parseInt(today.replace(".", ""));
for (String privacy : privacies) {
String[] arr = privacy.split(" "); //공백기준 수집일자: 약관 종류 나눔
int plus = map.get(arr[1]); //더할 개월 수 저장
int year= Integer.parseInt(arr[0].substring(0,4));
int month = Integer.parseInt(arr[0].substring(5, 7));
int date= Integer.parseInt(arr[0].substring(8));
String f_date= date==1 ? "28": String.valueOf(date-1);
if(f_date.equals("28")){
plus-=1;
}
String f_month = ( plus + month <= 12) ? String.valueOf(plus + month) :
( (plus + month) % 12 ==0)? "12" :String.valueOf((plus + month) % 12);
if(f_month.length()==1){
f_month = "0" + f_month;
}
if(f_date.length()==1){
f_date = "0" + f_date;
}
String f_year= (plus + month <= 12) ? String.valueOf(year):
( (plus + month) % 12 ==0)? String.valueOf(year+ (plus + month) / 12 -1): String.valueOf(year+ (plus + month) / 12);
int endDate= Integer.parseInt(f_year+f_month+f_date);
if(todayInt > endDate ){
answer.add(cnt);
}
cnt++;
System.out.println(todayInt + " " + endDate);
}
int[] ans = new int[answer.size()];
for (int i = 0; i < ans.length; i++) {
ans[i] = answer.get(i);
}
return ans;
}
}
내가 작성한 코드, 날짜-달-년도를 거슬러 올라가 각각 계산하여 yyyymmdd형태로 합치고, today와 비교한다.
import java.util.ArrayList;
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> map = new HashMap<>();
// 오늘 날짜를 계산하여 변수에 저장
int checkDate = getDate(today);
// 날짜를 계산하기 위해 약관 종류와 기간을 맵에 저장
for (String s : terms) {
String[] term = s.split(" ");
map.put(term[0], Integer.parseInt(term[1]));
}
// 개인정보 배열 privacies를 순회하며 처리 완료된 개인정보의 인덱스를 찾아서 리스트에 추가
for (int i = 0; i < privacies.length; i++) {
String[] privacy = privacies[i].split(" ");
// 처리 완료일 계산(개인정보 처리 시작일 + 처리 기간 * 28일)
if (getDate(privacy[0]) + (map.get(privacy[1]) * 28) <= checkDate) {
answer.add(i + 1);
}
}
// 리스트를 배열로 변환하여 반환
return answer.stream().mapToInt(i -> i).toArray();
}
// 날짜를 입력받아 계산하여 정수값으로 반환하는 메서드
public static int getDate(String date) {
String[] arr = date.split("\\.");
int year = Integer.parseInt(arr[0]);
int month = Integer.parseInt(arr[1]);
int day = Integer.parseInt(arr[2]);
// 날짜를 연도 * 12 * 28 + 월 * 28 + 일 로 계산하여 반환
return (year * 12 * 28) + (month * 28) + day;
}
}
출처: https://ittrue.tistory.com/492 [IT is True:티스토리]
더욱 간단한 풀이
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL
728x90
반응형
'공부 > 2024 항해99코딩클럽' 카테고리의 다른 글
99클럽 3기 코테 스터디 28일차 TIL /[백준] 1874번 스택 수열 (0) | 2024.08.18 |
---|---|
99클럽 3기 코테 스터디 27일차 TIL /[프로그래머스] 공 이동 시뮬레이션 (0) | 2024.08.17 |
99클럽 3기 코테 스터디 25일차 TIL /[프로그래머스] 순위 자바 (0) | 2024.08.16 |
99클럽 3기 코테 스터디 24일차 TIL /[프로그래머스] 가장 먼 노드 자바 풀이BFS (0) | 2024.08.14 |
99클럽 3기 코테 스터디 23일차 TIL /[LeetCode] 502.IPO 자바 풀이 (0) | 2024.08.13 |