https://www.acmicpc.net/problem/2753
2753번: 윤년
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서...
www.acmicpc.net
문제
풀이
주어진 조건을 정리해보면,
1. 4의 배수이면 → 윤년 (year % 4 == 0)
2. 100의 배수가 아니면 → 윤년 (year % 100 != 0)
3. 400의 배수이면 → 윤년 (year % 400 == 0)
3가지 조건을 모두 만족해야 한다.
1번과 2번의 조건은 &&(AND)로 묶고 3번은 ||(OR)로 묶으면 된다.
OR로 묶는 이유는 100의 배수이면 윤년이 아니기 때문에 false 값을 가진다. 하지만 100의 배수이고, 400의 배수인 경우 true값을 가져야 한다. 그러므로 두 조건이 같이 묶이는 것이 아닌 OR로 따로따로 묶어줘야 한다.
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 year;
do {
year = Integer.parseInt(br.readLine());
} while (year < 1 || year > 4000);
year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 1 : 0;
System.out.print(year);
br.close();
}
}