https://www.acmicpc.net/problem/1924
코드
#include <stdio.h>
int main()
{
char week[7][4] ={"SUN", "MON", "TUE", "WED", "THU", "FRI","SAT"};
int year = 20, year2 = 7, month, day;
scanf("%d %d",&month, &day);
if (month < 3)
{
year2--;
month += 12;
}
int result = (((21 * year) / 4)+ ((5 * year2) / 4) + ((26 * (month + 1) / 10)+ day - 1))%7;
printf("%s",week[result]);
return 0;
}
코드 설명
문제를 풀기 위해 제라의 공식을 이용했다.
제라의 공식은 연도와 월, 일을 통해 무슨 요일인지 구할 수 있는 식이다.
21*(연도/100)/4 + 5*(연도%100)/4 + 26*(달+1)/10 + 일 - 1 에 숫자들을 대입하면 되는데, 1월은 13월로, 2월은 14월로 계산해야 한다. 그리고 1월과 2월의 경우 연도에서 1을 빼야 한다. (예로 2022년 1월은 2021년 13월, 2000년 2월은 1999년 14월로 계산해야 한다.) 그렇게 구한 값을 7로 나눈 나머지를 구한다. 나머지가 0이면 일요일, 6이면 토요일이 된다.
제라의 공식을 식에 적용해서 year은 20, year2는 7로 정해두고 달과 일을 입력받는다.
1월과 2월의 경우, year2를 6으로 하고, 달에 12를 더한다.
제라의 공식의 결과를 인덱스로 해서 미리 선언해둔 배열에서 해당하는 값을 출력한다.
느낀 점
제라의 공식은 옛날에 공부글을 인스타그램에 올렸던 달력글에 어떤 분이 댓글로 알려주셔서 처음 알게 됐다. 코드에 실제로 적용해본 경험은 이번이 처음이었다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C] 1032 명령 프롬프트 (0) | 2022.08.20 |
---|---|
[백준/C] 1010 다리놓기 (0) | 2022.08.20 |
[백준/C] 문자열 (0) | 2022.08.20 |
[백준/C] 함수 (0) | 2022.08.20 |
[백준/C] 1차원 배열 (0) | 2022.08.20 |