Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 주어진 연도까지의 홀수 일(odd days) 개수 계산하기

양의 정수 n이 주어졌을 때, 1년부터 n년까지의 총 일수를 7(한 주의 일수)로 나눈 나머지, 즉 홀수 일(odd days)의 개수를 구하는 것이 이번 글의 목표입니다. 홀수 일은 달력 계산에서 특정 날짜의 요일을 빠르게 구할 때 활용되는 개념입니다.

예시

입력: days = 500
출력: 홀수 일의 개수: 5

입력: days = 400
출력: 홀수 일의 개수: 0

홀수 일 계산 원리

홀수 일을 계산하려면 무엇보다 먼저 해당 기간에 포함된 연도가 윤년인지 평년인지 판별해야 합니다. 윤년 여부에 따라 한 해의 일수와 홀수 일 개수가 달라지기 때문입니다.

윤년 판별 규칙은 다음과 같습니다.

  • 4로 나누어 떨어지는 해는 윤년이다.
  • 단, 100으로 나누어 떨어지는 해는 평년이다.
  • 400으로 나누어 떨어지는 해는 다시 윤년이다.

전체 일수를 7로 나눈 나머지(modulus)를 구하면 그 값이 곧 홀수 일의 개수가 됩니다. 평년은 365일이므로 홀수 일이 1개(365 % 7 = 1)이고, 윤년은 366일이므로 홀수 일이 2개(366 % 7 = 2)입니다.

프로그램의 접근 방식

  • 연도 수(days)를 입력값으로 받습니다.
  • 기간 내에 포함된 윤년과 평년의 개수를 각각 계산합니다.
  • 전체 일수에 모듈로(%) 연산을 적용하여 홀수 일을 구합니다.
  • 1부터 n년까지 누적된 최종 홀수 일 개수를 화면에 출력합니다.

알고리즘

시작
Step 1 -> 주어진 연도의 홀수 일 개수를 계산하는 함수 선언
    int cal_odd(int days)
    int cal_1 = days / 100         // 100으로 나누어 떨어지는 해의 개수
    int cal_2 = days / 400         // 400으로 나누어 떨어지는 해의 개수
    int check_leap = days >> 2     // 4로 나누어 떨어지는(윤년 후보) 해의 개수
    int temp = days - check_leap   // 평년의 개수
    IF (cal_1)
        temp += cal_1
        check_leap -= cal_1
    End
    IF (cal_2)
        temp -= cal_2
        check_leap += cal_2
    End
    int final_days = temp + check_leap * 2   // 평년은 1, 윤년은 2씩 더함
    int odd = final_days % 7
    return odd
Step 2 -> main() 함수 안에서
    int days = 500
    cal_odd(days) 호출
종료

C++ 예제 코드

#include <iostream>
using namespace std;

// 주어진 연도의 홀수 일 개수를 계산하는 함수
int cal_odd(int days) {
    int cal_1 = days / 100;
    int cal_2 = days / 400;
    int check_leap = days >> 2;
    int temp = days - check_leap;
    if (cal_1) {
        temp += cal_1;
        check_leap -= cal_1;
    }
    if (cal_2) {
        temp -= cal_2;
        check_leap += cal_2;
    }
    int final_days = temp + check_leap * 2;
    int odd = final_days % 7;
    return odd;
}

int main() {
    int days = 500;
    cout<<"number of odd days are : "<<cal_odd(days);
    return 0;
}

출력 결과

number of odd days are : 5

결과 해석: 400년은 정확히 146,097일로 7로 나누어 떨어지므로 홀수 일이 0개입니다. 따라서 500년은 400년(홀수 일 0개)과 100년(평년 76년 × 1 + 윤년 24년 × 2 = 124 → 124 % 7 = 5)으로 나누어 생각할 수 있으며, 최종적으로 홀수 일 5개가 됩니다.