[백준] 28070: 유니의 편지 쓰기 - JAVA

https://www.acmicpc.net/problem/28070

풀이

누적합으로 풀 수 있는 문제이다.

(입대 월)에는 배열에 +1을 해주고 (전역 월 + 1)에는 배열에 -1을 해준다.

2000년 1월부터 9999년 12월까지 돌면서 이전 배열의 것을 더해준다.


메모리: 81920KB

시간: 824ms

언어: Java 11

코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] dp = new int[120002];
        StringTokenizer st;
        int year;
        int month;
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            String[] a = st.nextToken().split("-");
            year = Integer.parseInt(a[0]);
            month = Integer.parseInt(a[1]);
            dp[year * 12 + month]++;

            String[] b = st.nextToken().split("-");
            year = Integer.parseInt(b[0]);
            month = Integer.parseInt(b[1]);
            dp[year * 12 + month + 1]--;

        }

        int max = 0;
        year = 0;
        month = 0;
        for (int i = 24000; i < 120001; i++) {
            dp[i] += dp[i - 1];
            if (dp[i] > max) {
                max = dp[i];
                year = i / 12;
                month = i % 12;
            }
        }

        if (month == 0) {
            year--;
            month = 12;
        }

        String ans;
        if (month < 10) {
            ans = year + "-0" + month;
        } else {
            ans = year + "-" + month;
        }

        System.out.println(ans);

    }

}