Day84

강태훈·2026년 4월 30일

nbcamp TIL

목록 보기
84/97

알고리즘 코드카타

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");
    }

    // 한달은 28일로 가정
    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]));
    }
}

0개의 댓글