- 문제 링크 : boj.kr/12438
- 난이도 : G5
- 태그 : 정수론
12438번: 새로운 달력 (Large)
태양계 밖에서 새로 발견된 행성 ELG8-G는 지구와는 다른 자전/공전주기를 가지고 있어서 지구의 달력을 그대로 가져다 쓸 수 없다. 이에 과학자들은 이 행성을 위해 새로운 달력 시스템을 만들기
www.acmicpc.net
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int T;
cin >> T;
for(int i = 0; i < T; i++) {
ll tm, md, wd;
cin >> tm >> md >> wd;
ll mc = 0;
ll left = 0;
ll mw = 0;
vector<ll> arr(1);
mc = 1;
left = md % wd;
mw = md / wd;
mw += (left ? 1 : 0);
arr.emplace_back(mw);
while(left) {
ll temp = md;
temp += left;
mc += 1;
left = temp % wd;
mw += temp / wd;
mw += (left ? 1 : 0);
arr.emplace_back(mw);
}
ll ans = 0;
ans += (tm / mc) * mw;
ans += arr[tm%mc];
cout << "Case #" << i+1 <<": " << ans << "\n";
}
return 0;
}
풀이
여러 달이 반복되다가 마지막에 어떤 달의 마지막 주가 전부 차있게 되는 한 더미를 주기라고 하자.
이때 한 주기의 길이는 주당 일수와 월당 일수의 최대 공약수이므로 주당 일수를 넘지 않는다.
따라서 O(주당 일수)로 한 주기의 정보(길이, 각 월별 주의 개수)를 구할 수 있고, 총 월 수를 주기로 나누어 주어 답을 구할 수 있다.
728x90
'PS' 카테고리의 다른 글
BOJ 20158 : 사장님 달려가고 있습니다 (0) | 2024.03.13 |
---|---|
BOJ 2175 : 땅 자르기 (0) | 2024.03.12 |
BOJ 2187 : 점 고르기 (0) | 2024.03.10 |
BOJ 1885 : 비부분수열 (0) | 2024.03.09 |
BOJ 1846 : 장기 (0) | 2024.03.08 |