본문으로 건너뛰기
풀이 목록으로 돌아가기

BOJ 5122 - Countdown

2026-04-04
BOJ
브론즈 I
cpp
원본 문제 보기
구현
수학

문제

BOJ 5122 - Countdown

마야 장주기력의 baktun.katun.tun.uinal.kin 값과 해당 날짜의 율리우스일(JDN)이 주어질 때, 오늘(2012-12-21, JDN 2456054)을 기준으로 1872000일 주기의 종말까지 남은 일수를 계산한다.

풀이

주어진 마야 날짜를 일수로 환산한 뒤(b*144000 + ka*7200 + tun*360 + w*20 + ki) 입력 JDN에서 빼면 장주기력 0일이 시작된 JDN을 구할 수 있다. 여기에 한 주기(1872000일)를 더해 종말 JDN을 얻고, 오늘 JDN과의 차로 남은 일수를 출력한다. 음수면 이미 지난 가짜 예언(It's a hoax!), 0이면 당일(Panic!)이다.

코드

#include <iostream>
 
using namespace std;
 
int main() {
  int K;
  if (!(cin >> K)) return 0;
 
  for (int t = 1; t <= K; t++) {
    long long b, ka, tun, w, ki, input_jdn;
    cin >> b >> ka >> tun >> w >> ki >> input_jdn;
 
    long long mlc_days = b * 144000LL + ka * 7200LL + tun * 360LL + w * 20LL + ki;
    long long jdn_at_zero = input_jdn - mlc_days;
    long long end_world_jdn = jdn_at_zero + 1872000LL;
 
    long long today_jdn = 2456054;
    long long diff = end_world_jdn - today_jdn;
 
    cout << "Data Set " << t << ":" << endl;
    if (diff < 0) {
      cout << "It's a hoax!" << endl;
    } else if (diff == 0) {
      cout << "Panic!" << endl;
    } else {
      cout << diff << endl;
    }
    cout << endl;
  }
  return 0;
}

복잡도

  • 시간: O(K)
  • 공간: O(1)

최근 글