※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10194번 문제인 Aligned Calender이다.
문제는 아래 링크를 확인하자.

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

 

10194번: Aligned Calender

The Minions have found that El Macho and other super-villains use a different calendar than the rest of us. Their calendar has 13 months that each have 28 days (thus the 13 months cover a total of 364 days). The remaining 1 or 2 days of the year (depending

www.acmicpc.net

입력으로 주어진 년이 윤년인지 여부는 (1) 먼저 해당 년이 4로 나누어떨어지는지 확인하고 (2) 만약 해당 년이 100으로도 나누어떨어진다면 400으로도 나누어떨어지는지 확인하는 것으로 판단할 수 있다.

 

입력으로 주어지는 년이 윤년이 아니라는 가정 하에 입력으로 주어진 날짜가 몇 번째 일인지를 먼저 계산하고, 윤년이라면 3월 이후의 날들의 경우 1을 더해주자. 이를 28일을 한 달로 잡아 새로운 날짜를 계산해 문제를 해결할 수 있다.

 

문제에 주어진 각 달의 일수를 복사 및 붙여넣기해 배열을 만드는 것으로 구현할 때의 귀찮음을 덜어보자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int T;
int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int Y, M, D;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> T;
	while (T--) {
		cin >> Y >> M >> D;
		int ansM = 1, ansD = D;
		for (int m = 0; m < M; m++) ansD += days[m];
		if (Y % 4 == 0 && (Y % 100 || Y % 400 == 0) && M > 2) ansD++;
		while (ansD > 28) ansD -= 28, ansM++;

		if (ansM < 14) cout << Y << '/' << M << '/' << D << " became " << Y << '/' << ansM << '/' << ansD << '\n';
		else cout << Y << '/' << M << '/' << D << " became a HOLIDAY\n";
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 13322 // C++] 접두사 배열  (0) 2023.12.10
[BOJ 10195 // C++] Underwater Trip  (0) 2023.12.09
[BOJ 28214 // C++] 크림빵  (0) 2023.12.07
[BOJ 17103 // C++] 골드바흐 파티션  (1) 2023.12.06
[BOJ 28073 // C++] PSAT 특별과정  (1) 2023.12.05

+ Recent posts