이 예제는 너무나도 유명한 윤년을 활용한 문제이다.

중점으로 봐야할 부분은 조건문의 조건을 어떻게 간결하게 할 것인지다.


문제

2월 29일까지 있는 해를 윤년이라고 합니다. 윤년의 조건은 연도가 4의 배수이면서 100의 배수가 아니거나 400의 배수인 경우입니다. 연도를 입력하고 입력한 연도가 윤년인지 아닌지 판별하는 코드를 작성하세요.

 

 

윤년의 조건은 4의 배수이면서(and) 100의 배수가 아니거나(or) 400의 배수인 경우라고 한다.

수학적으로 괄호로 표현하면 두 가지 경우라고 생각할 수 있을텐데

 

1. (4의배수) and (100의 배수X  or  400의 배수)

 

2. (4의 배수 and 100의 배수X) or (400의 배수)

 

접근

처음에 이 문제를 봤을 때 나는 위 두 개의 조건중에서 1번이 맞다고 생각하여 1번의 코드를 적었다가 어떠한 경우에는 윤년인데 윤년이 아니라는 결과창이 보여서 애를 먹었다.

국어를 못하는 건지 말장난에 걸린건지 (2)의 경우라고 생각하고 문제를 읽으니 고개가 끄덕여진다.

그럼 (2)번이 곧 윤년의 조건이니 (2)에 기반하여 코드를 작성했다.

 

n = int(input('연도를 입력하세요: ')

if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
    print('윤년입니다.')
else: print(n, '년은 윤년이 아닙니다.')

 

결과

2024년이 윤년이라는 것을 이 예제를 풀고 알았다 :)