본문 바로가기

프로그래밍 언어/Swift

[Swift] 윤년 계산기

반응형
윤년이란? 

윤년(閏年)은 역법을 실제 태양년에 맞추기 위해 여분의 하루 또는 월(月)을 끼우는 해라고 합니다.  위키백과

 

    윤년 규칙은 다음과 같습니다. 

 

  1. 서력 기원 연수가 4로 나누어떨어지는 해는 윤년으로 한다. (1992, 1996, 2004, 2008, 2012, 2016 ... )
  2. 서력 기원 연수가 4, 100으로 나누어떨어지는 해는 평년으로 한다. (1900, 2100, 2200, 2300, 2500 ... )
  3. 서력 기원 연수가 4, 100, 400으로 나누어떨어지는 해는 윤년으로 둔다. (1600년, 2000, 2400 ... )

 

1. 사용자에게 연도를 입력받아서 입력받은 연도가 윤년인지 판단하여 출력하시오.
2. 만약 입력이 없다면 현재 연도를 윤년인지 판단하여 출력하시오.
3. 위의 코드를 함수화 해서 함수를 호출하는 방식으로 만드시오.

윤년 규칙을 이용하여 윤년을 계산해주는 프로그램을 만들어 보겠습니다.

 

1. 사용자에게 연도를 입력받습니다.

print("연도를 입력하세요: ", terminator:"" )
var input = readLine()

 

2. Date() DateFormatter()를 이용하여 현재 연도를 출력합니다.

var current_data = Date()
var formatter = DateFormatter()
formatter.dateFormat = "yyyy"
var current_data_string = formatter.string(from: current_data)

 

3. 윤년 규칙을 이용한 윤년을 계산하는 함수를 만들어 줍니다. 

func leapyear(to input_num:Int) {
    // 연도가 400으로 나누어 떨어지면 윤년
    if input_num%400 == 0 {
        print("\(input_num)년은 윤년입니다.")
    }
    // 연도가 4로 나누어 떨어지지만 100으로는 나누어 떨어지지 않으면 윤년
    else if input_num%100 != 0 && input_num%4 == 0{
        print("\(input_num)년은 윤년입니다.")
    } 
    // 나머지는 평년 
    else{
        print("\(input_num)년은 윤년이 아닙니다.")
    }
}

 

4. 사용자가 아무 값도 입력하지 않을 경우 현재 연도를 출력하고, 연도를 입력할 경우 윤년를 계산해주는 함수를 호출합니다.

if input == "" {
    print("현재 연도는 \(Int(current_data_string)!)년 입니다.")
} else{
    var input_num = Int(input!)!
    leapyear(to: input_num)
}

 

전체 코드는 다음과 같습니다.

import Foundation

print("연도를 입력하세요: ", terminator:"" )
var input = readLine()

var current_data = Date()
var formatter = DateFormatter()
formatter.dateFormat = "yyyy"
var current_data_string = formatter.string(from: current_data)

func leapyear(to input_num:Int) {
    if input_num%400 == 0 {
        print("\(input_num)년은 윤년입니다.")
    }else if input_num%100 != 0 && input_num%4 == 0{
        print("\(input_num)년은 윤년입니다.")
    }else{
        print("\(input_num)년은 윤년이 아닙니다.")
    }
}

if input == "" {
    print("현재 연도는 \(Int(current_data_string)!)년 입니다.")
} else{
    var input_num = Int(input!)!
    leapyear(to: input_num)
}

 

입력과 출력

연도를 입력하세요: 2020
2020년은 윤년입니다.
연도를 입력하세요: 1800
1800년은 윤년이 아닙니다.
연도를 입력하세요: 
현재 연도는 2019년 입니다.

 

반응형