프로그래밍/코딩 테스트 연습

[백준] 2753번 : 윤년 (2단계) (C++)

w_w 2024. 1. 7. 13:57
 

2753번: 윤년

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

www.acmicpc.net

 


 

문제

 

 

 

 

 

 

해석

 

값이 주어지면 주어진 조건에 맞는지 판단하는 문제이므로 if 구문을 사용할 수 있습니다. 

 

 

 

 

 

 

풀이

 

if 구문을 이용해 주어진 조건(윤년) 참이면 1, 거짓이면 0을 출력하는 단순한 문제입니다.

 

다만 문제에 주어진 조건을 이해하고 코드로 변환하는 게 익숙하지 않다면 조건식을 세우는데 어려움이 있을 겁니다.

 

논리 연산은 " 이면서 = and "   "이고 = or "   " 같다 = '==' "   " 다르다 = '!=' " 만 기억한다면 어렵지 않게 접근할 수 있습니다.

 

" 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. "라는 조건을 다음과 같이 나타낼 수 있습니다.

if( (년도가 4의 배수 and 년도가 100으로 나눠 떨어지지 않음) or (년도가 400의 배수) )

 

이제 4의 배수 혹은 100으로 나눠지지 않을 때를 조건식으로 만들어야 합니다.

 

통상적으로 배수 혹은 나눠지지 않을 때를 다음과 같이 코딩합니다.

n % a == 0 // n은 a의 배수이다.
n % a != 0 // n은 a의 배수가 아니다.

 

이유는 % 연산 시 나머지가 반환되는데 n이 a의 배수라면 나머지는 0일 것이고, n이 a의 배수가 아니라면 0 이외의 정수가 반환될 것이기 때문에 다음 형식은 알아 둬야 합니다.

 

최종적으로 조건식은 아래와 같습니다.

if ((year % 4 == 0 && year % 100!=0) || (year % 400==0 ))

 

조건만 안다면 최종적인 코드가 다음과 같이 작성되는 데에는 쉽게 이해할 수 있을 겁니다.

 

#include<iostream>
using namespace std;

int main() {
    int year;
    cin >> year;
    if ((year % 4 == 0 && year % 100!=0) || (year % 400==0 ))
        cout << 1 << endl;
    else
        cout << 0 << endl;

}

 

하나의 데이터에 대한 출력을 요구하는 문제이고 줄 바꿈을 요구하지 않았기에 endl; 조작자를 제거해도 됩니다.

 

 

 


정리

 

문제에 주어진 조건을 이해하고 코드로 변환하는 연습을 하는 좋은 문제입니다. 또한 배수와 배수가 아님을 판단하는 하나의 표현도 학습할 수 있습니다.