본문 바로가기

코딩/백준 BOJ

[백준/C언어] 2753번 - 윤년

백준 웹사이트 "2753번 - 윤년" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

2753번: 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int year;
    scanf("%d", &year);

    if(year%400 == 0)
        printf("1");
    else if(year%100 == 0)
        printf("0");
    else if(year%4 == 0)
        printf("1");
    else
        printf("0");
}

문제 풀이

  이러한 문제는 상위 규칙부터 순서대로 다루어주는 것이 편합니다. 예를 들어, '4의 배수이면 윤년이다' 보다 상위에 있는 규칙은 '100의 배수이면 윤년이 아니다' 입니다. 1900처럼 4의 배수인 동시에 100의 배수인 연도는 윤년이 아니기 때문이죠. 최상위에 있는 규칙은 '400의 배수이면 윤년이다' 이며, 2000처럼 400의 배수이면 항상 윤년입니다. 이런 식으로 상위에 있는 규칙부터 다루어주면 편리한 점이 Line 7처럼 '100의 배수라면' 이라는 조건만 써주어도 else if의 성질에 의해 '400의 배수가 아니고, 100의 배수라면' 이라는 의미가 되기 때문입니다. Line 9 역시 '4의 배수라면' 이라는 조건만 쓰여있지만, 내포하는 의미는 '400의 배수가 아니고, 100의 배수가 아니고, 4의 배수라면'이죠.

반응형