※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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";
}
}
'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 |