티스토리 뷰

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때 이다.

예를들어, 2012년은 4의 배수라서 윤년이지만, 1900년은 4의 배수이지만, 100의 배수이기 때문에 윤년이 아니다.

하지만, 2000년은 400의 배수이기 때문에 윤년이다.

입력

첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

출력

첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

예제 입력

2000

예제 출력

1

해설

c 언어의 if 문을 사용해 보는 문제이다. 문제의 난이도는 if ~ else문 자체보다는 논리 연산자를 사용하는 방식에 있다. c의 논리 연산자 종류는 아래와 같다.

  • &&: 논리곱(AND)의 의미한다. 두 명제가 모두 참일 때만 참이며 그 외의 경우에는 거짓이다.
  • ||: 논리합(OR)으로 두 명제가 모두 거짓일 때만 거짓이며 그 외의 경우에는 모두 참이다.
  • !: 논리부정(NOT)으로 참인 명제는 거짓으로, 거짓인 명제는 참으로 바뀐다.

위 문제에서 "윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때"를 if문의 조건식으로 만들 수 있으면 된다. 첫 번째 조건은 '4의 배수'이다. 4의 배수를 구하는 함수를 구현해야 할까? 아니다. 4의 배수는 결국 4로 나누엇을 때 나머지가 없는 수라는 의미이므로 year % 4 == 0이라는 조건을 충족하면 된다. 이 조건을 충족하면서 '100의 배수가 아닐 때 또는 400의 배수일 때"라는 조건을 충족해야 한다. 각 수의 배수는 앞에서와 같이 나머지 연산을 통해 확인할 수 있으며 '아닐 때'는 비교 연산자 !=으로 확인하면 된다. 즉 각각은 year % 100 != 0year % 400 == 0으로 나타낼 수 있으며 두 조건은 '또는'으로 묶이는 논리합이므로 최종적으로 year % 100 != 0 || year % 400 == 0라는 조건식으로 정리된다. 첫 번째와 두 번째 항은 '이면서'로 묶이는 논리곱이므로 if문의 조건식은 year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0)가 된다.

관련해서 비교 연산자도 함께 알아본다.

  • ==: 좌우 항의 값이 같다
  • !=: 좌우 항의 값이 다르다
  • <=: 작거나 같다
  • >=: 크거나 같다
  • <: 작다
  • <: 크다

소스코드: c

#include <stdio.h>

int main(int argc, char *argv[])
{
    int year;
    scanf("%d", &year);
    if (year >= 1 && year <= 4000) {
        if (year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0)) {
            printf("1");
        } else {
            printf("0");
        }
    }
    return 0;
}

소스코드: python3

year = int(input())

if (year >= 1 and year <= 4000):
    if (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)):
        print("1")
    else:
        print("0")

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함
11-29 12:45