본문 바로가기

코딩/Java

[Java] 윤년 계산하는 알고리즘(feat. 백준 2753)

반응형

지구가 태양을 한 번 공전하면 1년이 흐릅니다.

이 시간을 정확히 말하자면 365일 5시간 48분 46초가 걸립니다.

하지만 우리는 대충 퉁쳐서 365일이라고 생각하기로 했습니다.

 

그런데 남아있는 5시간 48분 46초는 어디로 간걸까요?

지구가 차곡차곡 적립해서 4년에 한 번씩 2월을 하루 늘려줍니다.

그래서 4년마다 한 번 2월이 29일이 되는 해가 찾아오고, 이를 윤년이라고 부릅니다.

 

그런데 아직도 의문이 남아있습니다.

4년에 한 번씩 2월을 하루 늘리면 11분 정도가 초과되게 됩니다.

초과된 11분은 131년이 지나면 하루가 됩니다.

이걸 다시 모으면 대략 400년에 3일이 됩니다.

그래서 100년마다 한 번씩 윤년을 없애고, 400년마다 다시 하루를 추가해 윤년을 둡니다.

 

좀 복잡하죠?

이걸 정리하면 아래와 같습니다.

1. 연도가 4로 나누어 떨어지면 윤년.

2. 연도가 100으로 나누어 떨어지면 평년.

3. 연도가 400으로 나누어 떨어지면 윤년.

 

이걸 코드로 변환하면 아래와 같습니다.

(year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)

 

이제 이 코드를 조건으로 윤년인지 평년인지 출력하는 자바 코드를 작성하겠습니다.

int year = 2023;
if ((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)){
    System.out.println("윤년");
} else {
    System.out.println("평년");
}

정수형 변수 year에 판별하고 싶은 연도를 입력하면 조건문에 의해서 윤년인지 평년인지 판별해주는 코드입니다.

 

백준 2753번 문제는 자바를 이용해 윤년과 평년을 구분하는 것이 문제입니다.

import java.util.*;

class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();

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

Scanner를 이용해 연도를 입력받을 수 있도록 코드를 수정하고,

윤년이면 1을, 평년이면 0을 출력하도록 코드를 수정하면 됩니다.

반응형

'코딩 > Java' 카테고리의 다른 글

@Slf4j로 스프링 애플리케이션에 로그 남기기  (0) 2023.07.10
[Java] 369 게임 알고리즘  (0) 2023.06.01