loading

알고리즘/알고리즘JAVA

[백준알고리즘/JAVA/if문] 2753번 문제 : 윤년

침착곰 2021. 4. 21. 10:54
반응형

안녕하세요

백준 알고리즘에서 단계별로 풀어보기 2단계의 2753번 문제 윤년을 풀은 내용에 대해 알아보겠습니다

이 문제는 if문을 응용하면 풀 수 있습니다

처음 이 문제를 보고 좀 헷갈렸지만 금방 구현할 수 있었습니다

 

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

 

입력

첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

 

출력

첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

 

 

 

문제 풀이1

 if문과 그 외의 방법에 대한 내용은 주석으로 설명을 대체하겠습니ㅏㄷ

 이 방법은 맨 처음 방법으로 풀었을 때 통과한 방법입니다...;;

 굉장히 복잡하게 풀었습니다 ㄷㄷ ㅠ

 고민을 하다가 다른 방법을 생각해서 다 깔끔하게 구현한 방식이 있습니다

 다음 문제풀이를 확인해보겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {    
        // 년도를 입력하고 년도에 따른 윤년여부를 출력할 변수 선언
        int a;
        int b;
 
        // 년도 입력
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        
        if(a % 4 == 0) {
            if(a % 100 == 0)
            {
                // 4로 나누어떨어지지만 100으로 나누어 떨어지면 윤년X
                // 하지만 400으로 나누어떨어지면 윤년O
                if(a % 400 == 0)
                {
                    b = 1;                    
                }
                // 4로 나누어떨어지지만 100으로 나누어 떨어지면 윤년X
                else 
                {
                    b = 0;
                }
            }
            // 4로 나누어떨어지고 100으로 나누어 떨어지지 않으면 윤년O
            else 
            {
                b = 1;
            }
        }
        // 4로 나누어 떨어지지 않으면 윤년O
        else {
            b = 0;
        }
        
        // 결과 출력
        System.out.print(b);
    }
}
cs

 

문제 풀이2

 두 번째 방법입니다

처음에 if문에 윤년인 경우의 수를 모두 넣어서 윤년인지 아닌지 판별하도록 구현했습니다

후... 전에 구현했던 것보다 훨씬 가독성이 좋게 개발했네요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {    
        // 년도를 입력하고 년도에 따른 윤년여부를 출력할 변수 선언
        int a;
        int b;
 
        // 년도 입력
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        
        // 4로 나누어 떨어지면서 100으로 나누어떨어지지 않으면, 400으로 나누어떨어지면 윤년O
        if(a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
            b = 1;
        }
        // 그 외의 경우 윤년X
        else {
            b = 0;
        }
        
        // 결과 출력
        System.out.print(b);
    }
}
cs

 

여기까지 백준 알고리즘 2753번 문제인 윤년을 마치겠습니다

알고리즘을 푸는데 도움이 되셨으면 좋겠습니다

 

다음 문제 : 2021.04.21 - [알고리즘/알고리즘JAVA] - [백준알고리즘/JAVA/if문] 14681번 문제 : 사분면 고르기

이전 문제 : 2021.04.21 - [알고리즘/알고리즘JAVA] - [백준알고리즘/JAVA/if문] 9498번 문제 : 시험 성적

반응형
그리드형