문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
4의 배수인데 100의 배수가 아닌 것은 그림1과 같이 나타낼 수 있습니다. 그리고 100의 배수지만 400의 배수인 것까지 표시하면 그림2와 같습니다. 그림2에는 윤년 조건이 모두 들어가 있습니다.
그러나 그림2는 한눈에 보기도 어렵고 코드로 나타내기도 좀 복잡합니다. 여기서 100은 무조건 4의 배수이고 400은 무조건 100의 배수라는 것을 생각하면 다음과 같이 더 쉽게 나타낼 수 있습니다.
여기서 그림3은 윤년 조건인 부분을 색칠한 것이고, 그림4는 윤년이 아닌 부분을 색칠한 그림입니다. 그럼 벤다이어그램으로 정리한 조건을 코드로 나타내면 다음과 같이 적을 수 있습니다.
year = int(input())
if (year%4 == 0 and year % 100 != 0) or year % 400 == 0:
print(1)
else:
print(0)
year = int(input())
if year%4 != 0 or (year % 100 == 0 and year % 400 != 0):
print(0)
else:
print(1)
첫 번째 코드블럭은 윤년인 경우가 if의 조건이므로 그림3을 코드로 표현한 것입니다. 두 번째 코드블럭은 윤년이 아닌 경우가 if의 조건이므로 그림4와 같습니다. 각 조건의 코드를 말로 풀어서 쓰면 다음과 같습니다.
윤년인 조건은 '4의 배수이면서 100의 배수가 아닌 해 이거나 400의 배수인 해'이다.
윤년이 아닌 조건은 '4의 배수가 아니거나 100의 배수인 해 중에서 400의 배수가 아닌 해'이다.
※ 참고로 파이썬은 or와 and연산자에서 and의 우선순위가 더 높습니다. 이 코드에선 괄호가 없거나 다르게 씌워도 잘 동작하지만, 다른 문제를 풀 땐 이 사실을 주의합시다.
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ(백준) 5622] 다이얼 - 파이썬의 switch와 딕셔너리 (0) | 2021.05.28 |
---|---|
[BOJ(백준) 4673] 셀프넘버 - 파이썬 풀이 (1) | 2021.05.24 |
[BOJ(백준) 4344] 평균은 넘겠지 - 파이썬 풀이 (0) | 2021.05.23 |
[BOJ(백준) 10951] A+B - 4, 파이썬 문자열의 EOF (0) | 2021.05.23 |
[BOJ(백준) 1110] 더하기 사이클 - 파이썬 풀이 (0) | 2021.05.22 |