윤년

윤년

쉬움

소개

윤년(그레고리력 기준)은 다음과 같은 경우에 해당해요.

  • 4로 나누어떨어지는 모든 해.
  • 단, 100으로 나누어떨어지는 해는 400으로도 나누어떨어져야만 윤년이에요.

몇 가지 예를 볼까요.

  • 1997년은 4로 나누어떨어지지 않아서 윤년이 아니었어요.
  • 1900년은 400으로 나누어떨어지지 않아서 윤년이 아니었어요.
  • 2000년은 윤년이었어요!
Note

윤년이라는 현상 전반을 4분 만에 즐겁게 설명해 주는 YouTube 영상을 확인해 봐요.

지침

주어진 연도가 윤년인지 판단하는 것이 과제예요.

구현

시작하기 전에, 테스트 케이스를 통과하는 코드를 작성하는 방법을 제대로 이해하고 있는지 확인해요. 더 자세한 내용은 이 튜토리얼을 참고해요.

대부분의 Java 연습 문제에는 여러 테스트 케이스가 있어요. 이 케이스들은 테스트 주도 개발(TDD)이라는 유용한 과정을 지원하도록 구성되어 있어요. TDD는 프로그래머가 복잡한 기능을 한 번에 만드는 대신 하나씩 만들어 나가도록 도와주는, 체계적인 주기를 반복하는 방법이에요. 그 주기는 다음과 같이 설명할 수 있어요:

  1. 지금 코드에 빠져 있는 원하는 기능 한 가지를 설명하는 테스트를 추가해요.
  2. 테스트를 실행해서 새로 추가한 테스트가 실패하는지 확인해요.
  3. 다음 조건을 만족할 때까지 기존 코드를 수정해요:
    • 기존 테스트가 모두 계속 통과하고,
    • 새 테스트도 통과해요.
  4. 코드를 정리하고, 모든 테스트가 계속 통과하는지 확인해요. 보통 변수 이름을 바꾸거나, 중복된 로직을 제거하거나, 남아 있는 로깅을 지우는 등의 작업이 포함돼요.
  5. 원하는 기능을 모두 만들 때까지 1단계로 돌아가요!

이 트랙의 테스트 파일에는, 해법이 유효하다고 인정받기 위해 통과해야 하는 테스트가 모두 들어 있어요. 이는 테스트를 하나씩 작성하는 위에서 설명한 주기와는 바로 호환되지 않는 것처럼 보여요. 하지만 테스트를 작성할 때 사용하는 도구인 JUnit은 이미 작성된 테스트를 일시적으로 건너뛸 수 있는 @Disabled 애너테이션을 제공해요. 이 애너테이션을 사용해서, 전달해 드리는 테스트 파일이 다음 규칙을 따르도록 해요:

  • 모든 테스트 파일의 첫 번째 테스트는 기본적으로 건너뛰지 않아요.
  • 모든 테스트 파일에서 첫 번째를 제외한 나머지 테스트는 기본적으로 건너뛰어요.

이 덕분에 다음과 같이 살짝 수정된 단계를 따라 TDD 주기를 흉내 내볼 수 있어요:

  1. 테스트를 실행해서 현재 실패하는 테스트가 _최대 하나_인지 확인해요.
  2. 건너뛰지 않은 테스트가 모두 통과할 때까지 기존 코드를 수정해요.
  3. 코드를 정리하고, 건너뛰지 않은 모든 테스트가 계속 통과하는지 확인해요.
  4. 테스트 파일에서 가장 위에 있는 @Disabled 애너테이션을 제거해요.
  5. 건너뛰는 테스트가 하나도 없고 모든 테스트가 통과할 때까지 1단계로 돌아가요!
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Java Exercism

윤년 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Java 트랙을 개념 26개연습 문제 158개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

윤년 깊이 살펴보기!

윤년을 푸는 데 사용할 수 있는 다양한 알고리즘과 접근법을 깊이 파헤쳐 봐요. Jeremy와 Erik이 Exercism에서 10가지 언어에 걸친 흥미로운 커뮤니티 풀이를 살펴봐요.