백준 16463 - 13일의 금요일
Updated:
Java
16463 번 - 13일의 금요일
문제
- 2019년부터 N년까지 누적되는 13일의 금요일의 수를 출력한다.
접근 방법
2019년 부터 N 년까지 각 달마다 13일이 금요일인지 확인한다.
각 달이 넘어갈 때 마다 일 수를 해당하는 달만큼 증가시켜 요일을 확인한다.
2019년 1월의 1일은 1
이고, 2월의 1일은 32
이다.
각 달의 1일에서 12를 더한 값을 7로 Modulo 연산을 하면 해당하는 요일을 구할 수 있다.
매달 마다 현재 달까지의 총 날짜 수의 합을 구한 뒤, 그 달의 13일이 금요일인지 확인한다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
n = stoi(br.readLine());
int count = 0;
int day = 1; // 화요일
int[] month = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(int year = 2019; year <= n; year++) {
for(int j = 1; j <= 12; j++) {
if((day + 12) % 7 == 4) { // 13일이 금요일인지 확인
count++;
}
if(j == 2) {
if(year % 400 == 0) // 400의 배수 연도는 윤년이다.
day += 29;
else if(year % 400 != 0 && year % 100 == 0) // 400의 배수가 아니면서 100의 배수인 연도는 윤년이 아니다.
day += 28;
else if(year % 100 != 0 && year % 4 == 0) // 100의 배수가 아니면서 4의 배수인 연도는 윤년이다.
day += 29;
else // 그 외의 연도는 윤년이 아니다.
day += 28;
}
else
day += month[j];
}
}
System.out.println(count);
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
총평
후기
ㄴ
개선할 점
없습니다.