본문 바로가기
Online-Judge/Baekjoon

[Baekjoon] C++ 1924번 2007년

by nyangzzi 2021. 5. 20.
반응형

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

 

 

아래는 2007년 1월 달력이다.

 

1월 1일이 월요일인 것을 시작으로, 12월 31일까지 멈추지 않고 일주일(7일)이 돌아가며 나타난다.

즉, 1월 1일에서 7의 배수만큼 흐른 날은 무조건 '월요일'이다.

 

 

예를 들어, 7일 후인 8일 역시 월요일이며,

21(7*3)일 후인 22일 역시 월요일이다.

 

 

일주일은 멈추지 않고 돌아가므로, 35(7*5)일 후인 2월 5일 역시 월요일인 것을 알 수 있다.

 

 

다른 요일 역시 마찬가지이다.

1월 10일은 1월 3일로부터 7(7*1)일이 흐른 뒤이며, 이때 1월 3일은 수요일로 1월 1일보다 이틀이 흐른 뒤다.

 

 

따라서 해당 월-일이 되기 전까지 1월 1일로부터 며칠이나 흘렀는지 계산한다면,

해당 월-일이 어떤 요일인지 쉽게 구할 수 있다.

 

 

먼저, 1월 1일로부터 며칠이 흘렀는 지 계산한다.

int x, y = 0;
int sum, day = 0;

cin >> x >> y;
	
for (int i = 0; i < x; i++) {

	if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
		day = 31;
		sum = sum + day;
	}
	else if (i == 4 || i == 6 || i == 9 || i == 11) {
		day = 30;
		sum = sum + day;
	}
	else if (i == 2) {
		day = 28;
		sum = sum + day;
	}
}

sum = sum + y;

 

며칠 후인지 계산했다면, 나머지를 통해 어떤 요일인지 구할 수 있다.

일주일은 7일이므로 7로 나머지 연산을 하면 나머지에 따라 각각 다음과 같은 요일임을 알 수 있다.

 

1 - 월

2 - 화

3 - 수

4 - 목

5 - 금

6 - 토

0 - 일

 

sum = sum % 7;

if (sum == 1) {
	cout << "MON" << "\n";
}
else if (sum == 2) {
	cout << "TUE" << "\n";
}
else if (sum == 3) {
	cout << "WED" << "\n";
}
else if (sum == 4) {
	cout << "THU" << "\n";
}
else if (sum == 5) {
	cout << "FRI" << "\n";
}
else if (sum == 6) {
	cout << "SAT" << "\n";
}
else {
	cout << "SUN" << "\n";
}

 


[전체 코드]

#include <iostream>
using namespace std;

int x, y = 0;
int sum, day = 0;

int main() {

	cin >> x >> y;
	
	for (int i = 0; i < x; i++) {

		if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
			day = 31;
			sum = sum + day;
		}
		else if (i == 4 || i == 6 || i == 9 || i == 11) {
			day = 30;
			sum = sum + day;
		}
		else if (i == 2) {
			day = 28;
			sum = sum + day;
		}
	}

	sum = sum + y;
	sum = sum % 7;

	if (sum == 1) {
		cout << "MON" << "\n";
	}
	else if (sum == 2) {
		cout << "TUE" << "\n";
	}
	else if (sum == 3) {
		cout << "WED" << "\n";
	}
	else if (sum == 4) {
		cout << "THU" << "\n";
	}
	else if (sum == 5) {
		cout << "FRI" << "\n";
	}
	else if (sum == 6) {
		cout << "SAT" << "\n";
	}
	else {
		cout << "SUN" << "\n";
	}
}

 

반응형

'Online-Judge > Baekjoon' 카테고리의 다른 글

[Baekjoon] C++ 10871번 X보다 작은 수  (0) 2021.05.21
[Baekjoon] C++ 1546번 평균  (0) 2021.05.20
[Baekjoon] C++ 2839번 설탕 배달  (0) 2021.05.20
[Baekjoon] C++ 2558번 A + B -2  (0) 2021.05.19
[Baekjoon] C++ 10430번 나머지  (0) 2021.05.19

댓글