이번 포스팅은 Java 8버전에서 문제가 풀이됐습니다.
[ 백준 2753번 ]
문제
윤년을 구하는 문제이다.
조건) 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
출력
윤년이면 1, 아니면 0을 출력한다.
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[]args) throws IOException {
try {
InputStreamReader i_num = new InputStreamReader (System.in);
BufferedReader s_br = new BufferedReader(i_num);
String text[] = s_br.readLine().split(" ");
int a = Integer.parseInt(text[0]);
if(a%4==0 && a%100!=0 || a%400==0) {
System.out.println("1");
}else
{
System.out.println("0");
}
}
catch(IOException e) {
}
}
}
|
풀이
문제에서 주어진 조건은 16번째 줄을 정리해 봅니다.
1. a를 4로 나눴을 때 0으로 떨어지면 4의 배수이다. 4의 배수는 윤년이다.
2. a를 100으로 나눠 0으로 떨어지면 윤년이 아니다. 즉, ==조건이 아닌. != 조건을 만족해야 한다.
3. a를 400으로 나눠 0으로 떨어질 때는 윤년이다.
3가지 조건을 모두 만족해야 한다.
1번과 2번의 조건은 &&(AND)로 묶이고 3번은 ||(OR)로 묶여야 한다.
-> OR로 묶이는 이유는 다음과 같다.
100으로 나눠 0으로 떨어지면 윤년이 아니기 때문에 false 값을 갖는다. 하지만 100으로 나눴을 때 0으로 떨어져도 400으로 나눴을 때 0인 경우 참이 되어야 한다. 그러므로 두 조건이 같이 묶이는 것이 아닌 OR로 따로따로 묶여야 한다.
사실 윤년은 예전에 C언어로도 포스팅했지만 최근에 백준 코드 문제를 처음부터 차근차근 다시 풀어나가고 있기 때문에 풀이와 업로드를 진행했습니다.
앞으로도 가능하면 쉬운 문제들부터 본인이 풀 수 있는 문제들까지 코드 포스팅을 진행하려 합니다!
오타나 잘못된 내용이 있다면 댓글 부탁드리겠습니다.
다음 포스팅 때 뵙겠습니다. 감사드립니다.
'백준 - Java' 카테고리의 다른 글
[ 백준 - 1929] [Java] 소수 구하기 (0) | 2022.05.05 |
---|---|
[백준 - 1546] [Java] 평균 (0) | 2022.05.02 |
[백준 - 9498] [Java] 시험 성적 (0) | 2022.04.29 |
[백준 - 1001] [Java] A-B (0) | 2022.04.24 |
[백준 - 1000] [Java] A+B (0) | 2022.04.23 |