[백준 02730] 오늘은 OS 숙제 제출일 [Java]

2025. 7. 21. 12:26PS 풀이/Baekjoon Online Judge

문제

http://boj.ma/2730

 


풀이

문제 요약

마감일 정보와, 보고서의 제출일 정보가 주어졌을 때, 채점 기준에 따라 채점 해야하는 유요한 보고서인지 판별하자.

아이디어

문자열로 된 날짜를 정수로 변환하고, 마감일의 연도를 기준으로 제출일 연도를 유추했다.

static final int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    static int toDays(int y, int m, int d) {
        int days = d;
        for (int i = 0; i < m - 1; i++) {
            days += monthDays[i];
        }
        if (m > 2 && isLeap(y)) days += 1;
        days += 365 * (y - 1);
        days += (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;
        return days;
    }

두 날짜 간 차가 가장 작도록 날짜를 구했으며, 채점 여부를 결정해주면 된다.

            int bestDiff = Integer.MAX_VALUE;
            int bestSignedDiff = 0;
            String bestDate = null;

            // Solve
            for (int y = deadMonth - 1; y <= deadYear + 1; ++y) {
                if (!isValid(y, deadMonth, deadDay)) {
                    continue;
                }
                final int reportDays = toDays(y, reportMonth, reportDay);
                final int diff = Math.abs(deadDays - reportDays);
                if (diff < bestDiff) {
                    bestDiff = diff;
                    bestSignedDiff = reportDays - deadDays;
                    bestDate = reportMonth + "/" + reportDay + "/" + y;
                }
            }

풀이 시간

30분


소스코드

https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/normal/02730.java

 

problem-solving/baekjoon-online-judge/normal/02730.java at main · rogi-rogi/problem-solving

Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.

github.com