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

C++로 특정 월의 달력에 필요한 열(주) 개수 계산하기

두 개의 숫자 m(월)과 d(그 달 1일의 요일)가 주어졌다고 가정해 봅시다. 달력에서 요일은 열(column)로 표현되고, 날짜는 행(row)으로 표현됩니다. 우리가 구하고자 하는 것은 주어진 월 m과 그 달 첫날의 요일 d가 있을 때, 해당 달력을 완성하는 데 몇 개의 열이 필요한지입니다. (단, 윤년은 고려하지 않습니다.)

예를 들어 입력이 m = 11, d = 6이라면 출력은 5가 됩니다. 11월 1일이 토요일이고, 11월은 총 30일이므로 5개의 열이면 충분하기 때문입니다.

해결 접근 방법

이 문제는 다음 두 단계만으로 간단히 해결할 수 있습니다.

  • 각 월의 일수를 저장한 크기 13의 배열 a를 정의합니다. 인덱스 0은 사용하지 않고, 인덱스 1부터 12까지 각 월의 일수를 담습니다.
  • 공식 (a[m] + d + 5) / 7을 이용해 필요한 열의 개수를 계산하여 반환합니다.
Define an array a of size: 13 := { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
return (a[m] + d + 5) / 7

공식의 원리: 1일이 시작되기 전까지 빈 칸이 d − 1개 필요하므로, 달력 전체 칸 수는 a[m] + (d − 1)입니다. 여기에 7을 더하고 나누어 올림 처리하면, 즉 (a[m] + d + 5) / 7의 정수 나눗셈 결과가 곧 필요한 열의 개수가 됩니다.

예제 코드

아래 구현 예시를 통해 더 자세히 이해해 보겠습니다.

#include <bits/stdc++.h>
using namespace std;
int solve(int m, int d){
    int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    return (a[m] + d + 5) / 7;
}
int main(){
    int m = 11;
    int d = 6;
    cout << solve(m, d) << endl;
}

입력

11, 6

출력

5