Home 16463번(13일의 금요일)
Post
Cancel

16463번(13일의 금요일)

첫 시도

  • 매주 금요일이 13일인지 확인해보도록 구현 -> 너무 비효율적
  • 반대로 매달 13일이 금요일인지 확인해보기
  • 1일이 화요일이므로 4일은 금요일이다 & 이번달 13일부터 다음달 13일까지 걸리는 일 수는 현재 일 수 + 이번 달의 총 일 수이다.
  • 윤년마다 2월의 마지막 날을 29일로 처리해주기
  • 시간 복잡도는 O(12N) 정도이다.

해결

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(in.readLine());
        int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

        int answer = 0, date = 13;
        for (int year = 2019; year <= N; year++) {
            for (int month = 1; month <= 12; month++) {
                if (date%7 == 4) answer++;
                date += days[month];
                if (month == 2 && ((year%4 == 0 && year%100 != 0) || year%400 == 0)) date++;
            }
        }
        System.out.println(answer);
    }
}

참고

This post is licensed under CC BY 4.0 by the author.