백준 2753번 : 윤년 문제 풀이
조건문
https://www.acmicpc.net/problem/2753
첫번째 조건인 연도가 4의 배수이다는
year % 4 == 0 이다
두번째 조건인 100의 배수가 아닐 때 또는 400의 배수 일 때는
100의 배수가 아닐 때
year % 100 != 100
400의 배수 일 때
year % 400 == 0
마지막으로 100의 배수가 아닐 때 또는 400의 배수 일 때 는
OR 논리 연산자인 || 를 사용해서 표현할 수 있다
(year % 100 != 0) || (year % 400 == 0)
1.
첫번째로 제출한 코드이다
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
if (a % 4 == 0)
if ((a % 100 != 0) || (a % 400 == 0))
printf("1");
else
printf("0");
return 0;
}
에러는 뜨지 않았지만 문제를 맞추지 못하였다
여러가지 값을 출력해보니
else 부분을 출력하지 않는 것을 확인했다
조건문을 사용할 때
if (조건문)
(실행할 코드)
만약 실행할 코드가 한줄이라면 { } 중괄호를 생략할 수 있다
하지만 위의 코드는 실행할 코드가 2줄이지만 중괄호를 사용하지 않아서 뒷부분을 출력하지 않는다
2.
두번째로 제출한 코드이다
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
if (a % 4 == 0) {
if ((a % 100 != 0) || (a % 400 == 0))
printf("1");
}
else
printf("0");
return 0;
}
이번에는 맞을 줄 알았지만 아직도 문제를 맞추지 못하였다
여러가지 값들을 입력해보면서 오류를 찾아내었다
200을 입력했더니 0을 출력하지 않는 문제가 있었다
지금 첫번째 조건인 4의 배수이다 를 만족하면
다음 조건인 100의 배수가 아니거나 또는 400의 배수이다 의 조건에 걸린다
200은 100의 배수가 아니거나 또는 400의 배수 조건에 맞지 않는다
하지만 맞지 않을 때 출력하는 코드는 없기 때문에
200을 입력하면 아무것도 출력하지 않는 것이었다
따라서 else 를 추가해서 조건에 맞지 않을 때 0을 출력하도록 하면 된다
3.
최종적으로 제출한 코드이다
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
if (a % 4 == 0) {
if ((a % 100 != 0) || (a % 400 == 0))
printf("1");
else
printf("0");
}
else
printf("0");
return 0;
}
추가로 코드를 좀 더 짧게 만들기 위해 조건을 합쳐보았다
첫번째 조건인 4의 배수이다
a % 4 == 0
두번째 조건인 100의 배수가 아니다 또는 400의 배수이다
(a % 100 != 0) || (a % 400 == 0)
위의 두가지 조건이 모두 참일 때 1 을 출력하는 것이므로
AND 논리 연산자인 && 를 이용하여 묶어준다
((a % 4 == 0) && (a % 100 != 0) || (a % 400 == 0))
조금 더 짧게 수정한 코드이다
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
if ((a % 4 == 0) && ((a % 100 != 0) || (a % 400 == 0))){
printf("1");
}
else
printf("0");
return 0;
}
'Coding > baekjoon' 카테고리의 다른 글
[백준 / baekjoon] 2884번 : 알람 시계 [C] (0) | 2023.11.20 |
---|---|
[beakjoon] 14681번 : 사분면 고르기 [C] (0) | 2023.11.19 |
[baekjoon] 9498번 : 시험 성적 [C] (0) | 2023.11.16 |
[baekjoon] 1330번 : 두 수 비교하기 [C] (0) | 2023.11.16 |
[baekjoon] 10172번 : 개 [C] (0) | 2023.11.16 |