https://www.acmicpc.net/problem/16463
1. 아이디어
13일이 금요일이려면 해당 달의 1일이 일요일이어야 한다.
2. 문제풀이
윤년과 윤년이 아닌 년의 각 달의 날짜를 저장한 배열을 사용했고 윤년 여부에 따라 사용할 배열을 먼저 선택했다. 현재 요일은 week 변수에 저장했고 2019년 1월 1일이 화요일인데 일요일을 0, 토요일을 6으로 0 ~ 6까지 번호를 부여해서 현재 요일인 화요일(2)로 초기화했다. 이후 각 년의 각 월에 대해 1일이 일요일이면 개수를 세주고 해당 월의 날짜 수만큼 더한 후 7로 나누어주었다. 이렇게 하면 week는 각 년, 각 월의 1일의 요일이 계속 담기게 된다.
3. 코드
import java.io.*;
public class Main {
// 윤년
private static final int[] monArr = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 윤년이 아닌 년
private static final int[] monArr2 = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private static final int SUN = 0;
private static final int TUE = 2;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int week = TUE;
int cnt = 0;
for (int year = 2019; year <= N; year++) {
int[] arr = (year % 400 == 0) || (year % 100 != 0 && year % 4 == 0) ? monArr : monArr2;
for (int mon = 1; mon <= 12; mon++) {
if (week == SUN) cnt++;
week += arr[mon];
week %= 7;
}
}
System.out.println(cnt);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1388번 - 바닥 장식 [Java] (0) | 2025.02.12 |
---|---|
[백준] 9627번 - 문장 [Java] (0) | 2025.02.12 |
[백준] 1343번 - 폴리오미노 [Java] (0) | 2025.02.12 |
[백준] 19236번 - 청소년 상어 [Java] (0) | 2025.02.12 |
[백준] 9935번 - 문자열 폭발 [Java] (0) | 2025.02.12 |