문제
해석
값이 주어지면 주어진 조건에 맞는지 판단하는 문제이므로 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; 조작자를 제거해도 됩니다.
정리
문제에 주어진 조건을 이해하고 코드로 변환하는 연습을 하는 좋은 문제입니다. 또한 배수와 배수가 아님을 판단하는 하나의 표현도 학습할 수 있습니다.
'프로그래밍 > 코딩 테스트 연습' 카테고리의 다른 글
[백준] 2884번 : 알람 시계 (2단계) (C++) (0) | 2024.01.08 |
---|---|
[백준] 14681번 : 사분면 고르기 (2단계) (C++) (1) | 2024.01.08 |
[백준] 9498번 : 시험 성적 (2단계) (C++) (1) | 2024.01.07 |
[백준] 1330번 : 두 수 비교하기 (2단계) (C++) (0) | 2024.01.07 |
[백준] 10172번 : 개 (1단계) (C++) (0) | 2024.01.06 |