# 문제
- 주소: https://www.acmicpc.net/problem/2753
- 주어진 연도가 윤년이면 1, 아니면 0을 출력하기.
- 윤년은 4의 배수이면서, 100의 배수가 아닐 때, 또는 400의 배수일 때.
# 코드
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 = Integer.parseInt(br.readLine());
int a = year % 4;
int b = year % 100;
int c = year % 400;
if (a == 0) {
// 100의 배수가 아니라서 윤년, 400의 배수라서 윤년.
// b != 0 이면 윤년.
// b == 0 이면 윤년 아님
// c == 0 윤년
if (b != 0 || c == 0) {
System.out.println("1");
} else {
System.out.println("0");
}
} else {
System.out.println("0");
}
}
}
# 입/출력 결과
# 과정
- 입력은 BufferedReader + InputStreamReader로 받고, 입력 값은 ing타입의 year에 저장했다.
- 그리고 각 int타입의 a, b, c 변수에 year을 기준으로 %4, %100, %400 의 결과를 저장했다.
- if문을 사용하는데, 한번에 조건문에 작성한게 아니라 중첩 조건문으로 구현했다.
- a가 0이면 윤년이기 때문에 1의 값을 출력, 아니면 0의 값을 출력.
- a가 0 이면 윤년이지만, 만약에 b가 0이 아니거나 c가 0이면 윤년이기 때문에 1의 값을 출력, 아니면 0의 값 출력.
# 느낀 점
- 크게 어려운 점은 없었는데, 문제에서 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때 윤년이라는 말에 순간 적으로 이해가 안되어서 멍했다.
- 4의 배수면 'year % 4 == 0' 이고, 100의 배수가 아니라면 'year % 10 != 0' 이 것을 의미하는 것일거고, 400의 배수일 때에는 'year % 400 == 0'을 말하는 거 같은데, 이고, 아니면서 이고. 이렇게 되니까 문제를 이해하는데 순간 멈칫했었다.
- 그래서 처음에 4의 배수를 기준으로 4의 배수이면 1, 아니라면 0 이렇게 조건문을 작성한 다음에, 4의 배수라면 이 안에서 중첩 조건문을 작성했다.
- 4의 배수라서 윤년이지만, 100의 배수이면 윤년이 아님, 100의 배수가 아니면 윤년. 100의 배수더라도 400의 배수이면 윤년.
- 그래서 100의 배수가 아니거나 400의 배수면 윤년이라는 조건식으로 작성했다.
- 더 짧게 한다면 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) 이렇게 작성해도 될거 같다.
- 왜냫면 문제에서 4의 배수이지만, 100의 배수가 아니면 윤년. 그리고 100의 배수더라도 400의 배수면 윤년이기 때문에 문제 그대로 쭉 나열하면 이렇게 된다.
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 2884번: 알람 시계 (0) | 2025.05.09 |
---|---|
[코딩테스트] 백준 14681번: 사분면 고르기 (0) | 2025.05.09 |
[코딩테스트] 백준 9498번: 시험 성적 (0) | 2025.05.08 |
[코딩테스트] 백준 1330번: 두 수 비교하기 (0) | 2025.05.08 |
[코딩테스트] 백준 10172번: 개 (0) | 2025.05.08 |