[백준 BOJ] 1924번 2007년 (C언어)

2022. 1. 9. 17:27PS (Program Solving)/BOJ (백준)

문제 설명

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

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

백준 BOJ 1924번 2007년 문제 사진
백준 BOJ 1924번 2007년 문제 사진2

 

접근 방법 - 나머지 연산자를 이용한 수학 문제

백준 1924번은 일반적인 수학 문제, 특히나 나머지 연산자를 주요로 다룬 수학적 사고력 문제이다.

각 요일은 7일을 주기로 하여 번갈아가면서 나타난다. 

따라서 2007년 1월 1일을 시작으로 하여 입력받은 날짜까지의 총 일수를 구한 뒤, 여기에 7로 나머지 연산을 취하여 이를 통해 답을 구하면 된다.

(여기에서 2007년 1월 1일은 문제 상에서 월요일이라 말하고 있다.)

자세한 설명은 아래의 코드 실행 순서를 통해 확인하길 바란다.

 

코드의 실행 순서

1) 현재의 날짜 입력받기

 

2) 입력받은 날짜에 따라 총 일수 연산해서 구하기 (m에 대하여 n에 부가 덧셈하기)

(ex) 3월 3일 : n += 31; n += 28; => n = 31 + 28 + 3 (1,2월의 총 일수 + n)

 

3) n에 7로 나머지 연산하여 이에 알맞은 정답 출력하면서 실행 종료한다. 

(아래의 switch문 코드 참고)

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 1924번 코드
int main() {
	int m, n;
	scanf("%d %d", &m, &n);

	for (int i = m - 1; i > 0; i--) {
		if (i == 2) { n += 28; }
		else if (i == 4 || i == 6 || i == 9 || i == 11) {
			n += 30;
		}
		else { n += 31; }
	}

	switch (n % 7) {
	case 0:	printf("SUN"); break;
	case 1:	printf("MON"); break;
	case 2:	printf("TUE"); break;
	case 3:	printf("WED"); break;
	case 4:	printf("THU"); break;
	case 5:	printf("FRI"); break;
	case 6:	printf("SAT"); break;
	}
}

 

제출 결과

백준 BOJ 1924번 2007년 문제 C 제출 결과

(2021.12.17 백준 1924번 제출 결과)

반응형