본문 바로가기
IT 이야기/알고리즘

C++ / Java / 파이썬 그레고리력 윤년 계산

by youngmap 2023. 1. 10.
반응형

언어별로 그레고리력 윤년을 어떻게 계산하는지 알아봅시다.

 

백준 2753 문제가 가장 적절합니다.

 

연도가 입력으로 주어졌을 때 윤년 여부를 출력하는 문제입니다.

 

https://www.acmicpc.net/problem/2753

 

2753번: 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서

www.acmicpc.net

 

조건문에 and, or 연산자를 사용하는 문제입니다.
문제를 읽고 그대로 풀면 됩니다.

* 토막 상식

지구가 태양을 한 바퀴 도는데 걸리는 시간은 365.2422일 입니다.

오차를 보정하기 위해 4년에 한 번씩 윤년이 찾아옵니다.

 

윤년(그레고리력)은 2월달이 28일 다음 29일로 하루가 더 있습니다.

대부분의 사람들은 4년에 한 번씩 윤년이 찾아온다고 알고 있습니다.

 

단순 계산으로 400년동안 윤년은 100번 오게되겠죠?

하지만 실제 윤년은 100으로 나눠 떨어지는 년도는 제외해야 합니다.

 

100년, 200년, 300년은 윤년이 아닙니다. 400년은 윤년입니다.

따라서 400년동안 윤년은 97번 오게됩니다.

공전 주기가 365.25일이라면 윤년이 400년동안 100번이 맞겠지만,

365.2422일 이므로 이조차 보정이 필요하기 때문입니다.

 

 

1. C++

'%'는 나머지 연산입니다.

n을 4로 나눈 나머지가 0이라는 것은 4의 배수를 의미합니다.

and 조건은 '&&'로 or 조건은 '||'로 표현합니다.

#include <stdio.h>

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

    if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
		printf("1");
	}else {
		printf("0");
	}
}

 

2. JAVA

C++과 동일합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());

		if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
			System.out.println(1);
		} else {
			System.out.println(0);
		}
	}
}

 

 

3. Python 파이썬

파이썬은 and, or를 조건문에 사용합니다. 좀 더 직관적입니다.

n = int(input())
if ((n % 4 == 0 and n % 100 != 0) or n % 400 == 0) :
    print(1)
else:
    print(0)

 

반응형