LearnApplyShare

Day of the Programmer

August 31, 2018 - [calendar, leap-year, Gregorian, Julian]

Day of the Programmer

매해 256번째 날은 국제 프로그래머의 날이다. 일반적으로 9월 13일이고 윤년의 경우에는 9월 12일이 된다. 256은 2의 제곱으로 표현 가능한 자연수 중 356을 넘지않는 최대값이다. 또한 1바이트로 표현할 수 있는 정보의 최대 개수이기도 하다. 러시아는 2009년부터 이 날을 공휴일로 지정했다.


라시아 달력

  • 러시아는 1917년 까지는 줄리안 달력을 사용했지만 1919년 부터는 그레고리 달력을 사용한다.
  • 줄리안달력에서 고레고리달력으로 넘어간 시점은 1918년에 발생했다

    • 1918년 1월 31일 다음 날은 2월 14일이 되었다
  • 2월 달이 29일인 년도를 윤년이라고 하는데 두 달력은 이 윤년을 계산하는 방식이 서로 다르다

    • 줄리안 달력: 4로 나누어 떨어지는 년도가 윤년
    • 그레고리 달력: 년도가 400으로 나누어 떨어지면 윤년, 아니라면 4로 나누어 떨어지고 100으로 나누어 떨어지지 않는다면 윤년

퀴즈

임의의 년도가 주어질 때 그 년도에 해당하는 프로그래머의 날이 언제인지 계산하라. https://www.hackerrank.com/challenges/day-of-the-programmer/problem


입출력 예제

Sample Input

2016

Sample Output

12.09.2016

js 코드

풀이는 간단하다. 그냥 위에 제시된 윤년의 조건을 분기로 표현하면 된다.

function dayOfProgrammer(year) {
  if (year > 1918) {
    // 그레고리 달력
    if (year % 400 === 0) {
      // 윤년
      return "12.09." + year
    } else if (year % 4 === 0 && year % 100 !== 0) {
      // 윤년
      return "12.09." + year
    } else {
      // 평년
      return "13.09." + year
    }
  } else if (year < 1918) {
    if (year % 4 === 0) {
      // 윤년
      return "12.09." + year
    } else {
      // 평년
      return "13.09." + year
    }
  } else {
    // 1918년
    return "26.09." + year
  }
}