알고리즘 코드카타
User Activity for the Past 30 Days I
select date_format(activity_date, '%Y-%m-%d') as day, count(distinct user_id) as active_users
from Activity
where activity_date between '2019-06-28' and '2019-07-27'
and activity_type is not null
group by year(activity_date), month(activity_date), day(activity_date)
;
개인정보 수집 유효기간
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
List<Integer> answers = new ArrayList<>();
LocalDate todaydate = LocalDate.parse(today.replace(".", "-"));
for(int i = 0; i < privacies.length; i++){
LocalDate dateTime = date(terms, privacies[i]);
System.out.println(i + "번: " + dateTime);
if (dateTime.isEqual(LocalDate.parse("1900-01-01"))){
continue;
}
if(dateTime.isBefore(todaydate)){
answers.add(i+1);
}
}
return answers.stream().mapToInt(Integer::intValue).toArray();
}
public static LocalDate date(String[] term, String privacy){
char a = privacy.charAt(privacy.length()-1);
String date = privacy.split(" ")[0].replace(".", "-");
LocalDate dateTime = LocalDate.parse(date);
for(String t:term){
if(t.charAt(0) == a){
int plusMonths = Integer.parseInt(t.split(" ")[1]);
dateTime = dateTime.plusMonths(plusMonths);
return dateTime;
}
}
return LocalDate.parse("1900-01-01");
}
}
- 이렇게 하였는데 모든 달은 28일까지로 되어있어서 아래로 수정
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(String today, String[] terms, String[] privacies) {
List<Integer> answers = new ArrayList<>();
LocalDate todaydate = LocalDate.parse(today.replace(".", "-"));
for(int i = 0; i < privacies.length; i++){
LocalDate dateTime = date(terms, privacies[i]);
if (dateTime.isEqual(LocalDate.parse("1900-01-01"))){
continue;
}
if(dateTime.isBefore(todaydate)){
answers.add(i+1);
}
}
return answers.stream().mapToInt(Integer::intValue).toArray();
}
public static LocalDate date(String[] term, String privacy){
char a = privacy.charAt(privacy.length()-1);
String date = privacy.split(" ")[0];
for(String t:term){
if(t.charAt(0) == a){
int plusMonths = Integer.parseInt(t.split(" ")[1]);
return dateadded(date, plusMonths);
}
}
return LocalDate.parse("1900-01-01");
}
public static LocalDate dateadded(String date, int month){
int[] index = Arrays.stream(date.split("\\.")).mapToInt(Integer::parseInt).toArray();
index[2] += month*28 - 1;
if (index[2] > 28){
index[1] += index[2] / 28;
index[2] %= 28;
if (index[2] == 0){
index[2] = 28;
index[1] -= 1;
}
}
if (index[1] > 12){
index[0] += index[1] / 12;
index[1] %= 12;
if (index[1] == 0){
index[1] = 12;
index[0] -= 1;
}
}
return LocalDate.parse(String.format("%d-%02d-%02d", index[0], index[1], index[2]));
}
}