문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
예제 입력 1
2000
예제 출력 1
1
예제 입력 2
1999
예제 출력 2
0
#문제 풀이 방법
1. 연도가 입력되면
2. 예제 출력처럼 윤년인지 아닌지 판단하여 0 또는 1로 출력한다.
3. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
4. 따라서 윤년을 판단하기 위해 조건문을 이용한다.
따라서
1. 400의 배수를 만족하면 무조건 윤년
2. 400의 배수가 아니고, 100의 배수가 아니며 4의 배수이면 윤년
3. 나머지는 윤년이 아니다.
라고 3가지 경우로 나눌 수 있을 것 같다.
#C/C++
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a%400==0)//400의 배수를 만족하면 무조건 윤년
{
cout<<1;
}
else if(a%100!=0&&a%4==0)//400의 배수가 아니고, 100의 배수가 아니며 4의 배수이면 윤년
{
cout<<1;
}
else
{
cout<<0;//나머지는 윤년이 아니다.
}
return 0;
}
(기존에는 C와 C++을 따로 썼는데, 사실 몇몇 함수만 다를 뿐 기본적으로 내용이 동일하다. 또한 나중에 더 어려운 문제들은 STL도 써야하기 때문에 C++로 대체한다.)
위와 같이 조건문을 사용했는데,
좀 더 간략해지는 방법을 찾기 위해
카르노 맵을 써봐야겠다.
A: 4의 배수인 것
B: 100의 배수가 아닌 것
C: 400의 배수인 것
으로 할 때, 카르노 맵을 만들면 아래와 같다.
C/ AB | 00 | 01 | 11 | 10 |
0 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
따라서 AC+AB=A(C+B)라는 것을 알 수 있다.
(뭘 이런걸로 이렇게까지 하나 싶긴 하다.)
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a%4==0&&(a%100!=0||a%400==0))//A(C+B)
{
cout<<1;
}
else
{
cout<<0;
}
return 0;
}
#Python
a=int(input())
if a%4==0 and (a%100!=0 or a%400==0):
print(1)
else:
print(0)
반응형
'PS > 백준' 카테고리의 다른 글
[백준/Baekjoon]<10171번> 고양이 [C/C++/Python][Class 1] (0) | 2022.07.10 |
---|---|
[백준/Baekjoon]<9498번> 시험 성적 [C/C++/Python][Class 1] (0) | 2022.07.10 |
[백준/Baekjoon]<2741번> N 찍기 [C/C++/Python][Class 1] (0) | 2022.07.09 |
[백준/Baekjoon]<2739번> 구구단 [C/C++/Python][Class 1] (0) | 2022.07.09 |
[백준/Baekjoon]<2557번> Hello World [C/C++/Python][Class 1] (0) | 2022.07.08 |