본문 바로가기

BAEKJOON/수학

백준 33612번 [피갤컵](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 33612 [SW 마에스트로 입학식]


문제 링크: https://www.acmicpc.net/problem/33612

문제 설명:

SW 마에스트로 입학식은 매년 7개월마다 돌아오며, 첫 입학식은 2024년 8월입니다.
입력으로 주어지는 정수 n에 대해, n번째 입학식이 열리는 연도와 월을 출력하는 문제입니다.

예를 들어,

  • 1번째 입학식 → 2024년 8월
  • 2번째 입학식 → 2025년 3월
  • 3번째 입학식 → 2025년 10월

이처럼 7개월 단위로 다음 입학식 날짜가 순차적으로 결정됩니다.


문제 해결 코드


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

    int n;
    scanf("%d", &n);

    int y = 2024; // 시작 연도
    int m = 8 + 7 * (n - 1); // 총 누적 월수 계산

    // 누적 월이 몇 년 뒤인지 계산
    int d = (m % 12 == 0) ? m / 12 - 1 : m / 12;
    m -= (d * 12); // 해당 월 계산

    printf("%d %d", y + d, m); // 연도 및 월 출력

    return 0;
}

예제 입력:

5

예제 출력:

2026 5

코드 설명

  • 핵심 아이디어: 2024년 8월부터 시작해 7개월 간격으로 다음 입학식이 열리므로 누적 월로 접근
  • 구현 세부사항:
    • m = 8 + 7*(n-1)을 통해 시작 월로부터 누적 개월 수 계산
    • d는 몇 년이 더해지는지를 의미하며, m을 12로 나눠서 계산
    • 연도는 2024 + d, 월은 12를 넘지 않도록 m - d*12 처리
  • 시간 복잡도: O(1), 단순한 수학 계산

결과

7개월 주기로 반복되는 이벤트를 계산하는 수학적 문제로, 간단한 월-연도 변환 로직을 연습하기 좋은 문제입니다. datetime 관련 계산을 수동으로 구현해보는 데 유용합니다.

다른 구현 방법이나 확장 아이디어가 있다면 댓글로 공유해주세요!

728x90
LIST