첫 시도
- 매주 금요일이 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);
}
}