아래 문제는 네이버 부스트캠프 8기 코딩테스트 유형으로 제공된 문제입니다.
아래 그림을 참고하면 더 이해가 쉽다.
int foo(int year){
if((year % 4 != 0 || year % 100 == 0) && year % 400 != 0)
return 0;
else
return 1;
}
이 문제는 평년 기준으로 생각하기보다 윤년을 기준으로 생각하는 것이 더 이해하기 쉽다.
윤년은
으로 나타 낼 수 있고, 윤년을 제외하면 모두 평년이다.
그러므로 평년이 되는 조건은
으로 단순하게 나타낼 수 있다.
무조건 400의 배수가 아니어야하므로 && (year % 400 != 0)
조건은 AND로 표현했고,
나머지 두 조건 (4의 배수가 아니거나, 100의 배수임)은 ||
으로 포현했다.
year % 4 != 0 || year % 100 == 100