MSM8994의 화룡점정 블로그

[JAVA] 윤년 구하는 코드 짧게 작성하기 본문

코딩

[JAVA] 윤년 구하는 코드 짧게 작성하기

msm8994 2018. 8. 1. 16:30

윤년 구하는 코드 찾아보면서 한 줄로 어떻게 안되나 싶은 마음이 드셨을겁니다.

year % 4 == 0 && year % 100 != 0 || year % 400 == 0

4년마다 오고 100년마다는 아니지만 400년마다는 윤년이 되는걸 짧게 표현할 수 있을까?.

그래서 인터넷을 돌다가 이런 코드가 눈에 밟혔습니다.
자바스크립트로 짜여진 21자 코드인데 원형은 이렇게 생겼습니다. 여기서 y는 년도입니다.

!(y%(y%25?4:16))
(출처: https://codegolf.stackexchange.com/questions/50798/counting-leap-years)


자바스크립트는 C처럼 0을 false로, 나머지를 true로 사용할 수 있습니다.
따라서 이런 암시가 없는 자바를 위해 조금 바꾼다면 조건이 27→24자가 됩니다.

!(y%(y%25!=0?4:16)!=0)
y%(y%25!=0?4:16)==0
조건을 해석하면 다음과 같습니다.
1. y가 25로 나누어 떨어지면 y를 16으로 나누어 떨어지는지 따집니다.
   4 x 25 = 100 이고 16 x 25 = 400이 되어 100년마다를 평년으로 400년마다를 윤년으로 판별합니다.
2. y가 25로 나누어 떨어지지 않으면 y를 4로 나누어 떨어지는지 따집니다.
   100으로 나누어 떨어지지 않는 나머지 년도는 4년마다 한 번씩 오도록 계산합니다.

사실 100 400 이렇게 하는게 알아보기가 좋을테니 이런게 있다 정도로만 알아두시면 됩니다.

Comments