이코노딩

Dart: 년도를 입력받아 '윤년' 판정 프로그램 본문

언어/Dart & Flutter

Dart: 년도를 입력받아 '윤년' 판정 프로그램

떼이로 2022. 3. 26. 03:18

Dart 공부를 시작하며, 처음으로 받은 문제이다.

 

Q. 년도를 입력 받아 '윤년'인지 아닌지를 판정하는 프로그램을 만들어라

 

▶윤년이란? 

윤년(, leap year)은 과년()이라고도 하며, 역법인 태음력이나 태양력에서, 자연의 흐름에 대해서 생길 수 있는 오차를 보정하기 위해 삽입하는 이나 이 들어가는 해를 말한다. 삽입하는 달을 정하는 방법을 치윤법()이라고 한다.
출처 - https://namu.wiki/w/%EC%9C%A4%EB%85%84

이라고 하는데 코딩에 필요한 부분은 규칙을 알아야한다.

윤년 추가 규칙은 다음과 같다.
  • 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.

그레고리력에는 다음과 같은 예외 규칙이 있다.
  • 100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않는 해는 평년으로 한다.(예: 1900년, 2100년)

 

#1 Code

import 'dart:io';

void main() {
  ///년도를 입력받기
  print("년도:");
  int? n = int.parse(stdin.readLineSync()!);

  ///그레고리력조건을 추가한 조건식
  if(n%4 == 0 && n%100 == 0 && n%400 != 0){
    print("$n년은 윤년입니다.");
  }
  else{
    print("$n년은 윤년이 아닙니다");
  }
}

 

#실행결과

윤년인 2012년도와 2008년까지 '윤년'이 아니라고 출력이 된다.

조건식 문제인 것 같아 좀 더 조건을 생각해보기로 하였다.

 

#2 Code

import 'dart:io';

void main() {
  ///년도를 입력받기
  print("년도:");
  int? n = int.parse(stdin.readLineSync()!);

  ///그레고리력조건을 추가한 조건식
if (n % 4 == 0 || n % 100 == 0 && n % 400 != 0) {
    print("$n년은 윤년입니다.");
  }
  else{
    print("$n년은 윤년이 아닙니다");
  }
}

 

#실행결과

생각해보니 100으로 나누어 떨어지는 수는 4로도 무조건 나누어 떨어지는데 100으로 나누어 떨어지는 조건은 필요 없다고 판단되 코드를 더 간결하게 조건문을 손 봐주었다.

 

#3 Code

import 'dart:io';

void main() {
  ///년도를 입력받기
  print("년도:");
  int? n = int.parse(stdin.readLineSync()!);

  ///그레고리력조건을 추가한 조건식
if (n % 4 == 0 && n % 400 != 0) {
    print("$n년은 윤년입니다.");
  }
  else{
    print("$n년은 윤년이 아닙니다");
  }
}

결과는 #2 Code와 똑같이 동작 하였다.