[class 1]백준 윤년(2753번) 풀이 (C++/Python)
문제 : 윤년(2753번)(Bronze V)
문제 링크 : https://www.acmicpc.net/problem/2753
출처 : Baekjoon Online Judge
이 문제는 조건문의 응용 버전입니다.
전공자라면 불 대수를 활용하여 풀 수 있으나 여기서는 비전공자 기준으로 설명하겠습니다.
우선 문제 내용에 다음과 같은 내용이 있어요.
" 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다."
여기서 조건을 2개로 쪼갤 수 있습니다.
1번째 조건 : 4의 배수이면서, 100의 배수가 아닐 때
2번째 조건 : 400의 배수
여기서 "~ 또는"이므로 1번째 조건과 2번째 조건 중 하나라도 만족하면 참으로 판정합니다.
그러므로 C++에서는 (1번째 조건) || (2번째 조건)으로 볼 수 있습니다.
그 다음으로 4의 배수이면서, 100의 배수가 아닐 때라는 것에서 또 다시 조건 2개로 쪼개집니다.
1-1번째 조건 : 4의 배수
1-2번째 조건 : 100의 배수가 아닐 때
"~이면서"이므로 1-1번째 조건과 1-2번째 조건 모두 만족해야 1번째 조건이 참이 됩니다.
정수 n이 주어질 때 a의 배수인 것을 확인할려면 어떻게 해야 할까요?
n을 a로 나눌 때 나머지가 0이면 "n은 a의 배수"라는 것을 알 수 있습니다.
즉, n % a == 0으로 표현할 수 있습니다.
이것으로 전체 조건식을 작성하면 다음과 같습니다.
1번째 조건식 : n % 4 == 0 && n % 100 != 0
2번째 조건식 : n % 400 == 0
전체 조건식 : n % 4 == 0 && n % 100 != 0 || n % 400 == 0
not, and, or 순서로 우선순위가 존재하므로 전체 조건식에서 굳이 괄호 ()는 추가할 필요가 없습니다.
이제 이 과정을 C++로 표현합니다.
[C++]
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int year;
cin >> year;
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
cout << 1;
} else {
cout << 0;
}
return 0;
}
그 다음으로 Python으로 표현해 봅니다.
&& -> and, || -> or로 변환해주세요.
import sys
input = sys.stdin.readline
year:int = int(input().rstrip())
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
print(1)
else :
print(0)