ALGORITHM

백준 16463 13일의 금요일 (Java)

공부하는_다온 2023. 5. 30. 22:00

1. 문제 링크

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

 

16463번: 13일의 금요일

재운이는 이 구역의 소문난 오컬트 매니아다. 늘 도서관에서 오컬트 서적을 읽고 외계문물 스터디에 참여하던 재운이는 어느 날 엄청난 소문을 듣게 되었다. 소문의 정체는 지구의 미래에 관한

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 월별 날짜를 배열에 저장해둔다.

2. N년까지 가면서 처음에 13일로 시작한 날짜가 금요일인지 판단한다.

    2-1. 2019년 1월 첫 금요일이 4일이어서 7로 나눈 나머지가 4인 경우를 찾았다.

3. 월별 일수를 더한다.

4. 윤년인 경우에는 일수에 1을 더한다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

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[] num = {31,28,31,30,31,30,31,31,30,31,30,31};
		int result = 0;
		int day = 13;
		
		for(int i = 2019; i<N+1; i++) {
			for(int j=0; j<12;j++) {
				if(day % 7 == 4) { //금요일인지 //2019년 1월 첫 금요일이 4일
					result++;
				}
				day+=num[j];
				
				if(j==1 && (i%400==0 || (i%4==0 && i%100!=0))) { //윤년
					day++;
				}
			}
		}

		System.out.println(result);
	}
}