본문 바로가기

C 언어

백준으로 배우는 C 언어 11. 윤년

저번 문제에서 관계 연산자에 대해서 배웠는데요, 이번 문제에서는 또 다른 연산자인 논리 연산자에 대해서 알려드리도록 하겠습니다. 논리 연산자는 논리곱(And), 논리합(Or), 그리고 부정(Not) 이렇게 세 가지로 이루어져 있는데요, 바로 배워보도록 하죠!


 

백준으로 배우는 C 언어 09. 곱셈

저번 문제에서 나눗셈의 나머지를 구하는 방법에 대해서 설명했었는데요, 학교에서도 초등학교 때 말고는 나머지를 쓸 일이 거의 없었던 것처럼 나머지를 구해서 어디에 사용할지 모르겠는 분들이 있을 겁니다...

torotoblog.tistory.com

 

백준으로 배우는 C 언어 10. 두 수 비교하기

백준의 단계별 풀어보기 1단계를 마치고 두 번째 단계입니다! 입출력과 사칙연산에서 프로그래밍에 대해 간단하게 맛을 봤으니 이제는 본격적으로 깊게 파고 들어가 봅시다! 프로그래밍을 할 때 제일 많이 사용되..

torotoblog.tistory.com


이번 문제는 윤년(#2753)입니다. 입력받은 값을 윤년인지 아닌지 확인한 후 윤년이면 1, 아니면 0을 출력하는 문제인데요, 윤년은 100의 배수가 아닌 4의 배수 또는 400의 배수인 연도입니다. 조건들이 좀 많죠. 그럼 이런 경우에는 어떻게 조건식을 세워야 할까요?

#include <stdio.h>

int main(void) {
    int a;
    scanf("%d", &a);
    if((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
        printf("1\n");
    else
        printf("0\n");
    return 0;
}

뭔가 복잡해 보이네요... 지금까지 배운 내용들이 거의 다 들어가 있습니다. % 부터 시작해서 등호, 이번에 배우게 될 논리곱(&&)논리합(||)도 포함돼있네요. 자세하게 살펴봅시다. 

a % 4 == 0 && a % 100 != 0

일단은 첫 괄호 속을 살펴보겠습니다. 윤년의 첫 번째 정의는 4의 배수(a % 4 == 0)이지만 100의 배수는 아닌(a % 100 != 0) 연도입니다. 저번 문제에서 배웠었죠? == 는 양쪽 값이 서로 같은 경우 참을 반환하고 != 는 양쪽 값이 서로 다른 경우 참을 반환합니다. 자 이제 배수인지 아닌지를 확인해줄 조건식을 만들었으니 두 조건이 모두 만족될 때에만 참을 반환하도록 해야 합니다. 이럴 때 논리곱 &&을 사용하는데요, 논리곱은 양쪽 값이 모두 참일 때 참을 반환합니다. 

(a % 4 == 0 && a % 100 != 0) || a % 400 == 0

윤년인지 확인하기 위한 세 번째 조건은 400의 배수인데요, 이번에는 논리곱이 아닌 논리합 ||을 사용해야 합니다. 4의 배수이지만 100의 배수가 아닐 때 또는 400의 배수일 때라고 했기 때문이죠. 즉 앞 조건이나 400의 배수 둘 중 하나만 참 이어도 윤년이라는 뜻입니다. 논리합의 기호가 조금 헷갈리실 분들도 있을 것 같은데요, 알파벳 L이 아니라 Shift + \(백슬래시)를 누르면 나오는 |입니다. 

이제 테스틀 해 볼까요? 빌드를 한 뒤 다양한 연도들을 입력해 봅시다. 윤년이면 1, 아니면 0을 출력하네요.

제출을 합시다! 언어를 C로 선택한 뒤 제출 버튼을 클릭하시면 됩니다. 

성공이네요!


 

백준으로 배우는 C 언어 12. 상근날드

저번 문제들에서 관계 연산자와 논리 연산자들에 대해서 배웠는데요, 이번 문제에서는 이 두 연산자들을 같이 활용해보도록 하죠. 백준으로 배우는 C 언어 10. 두 수 비교하기 백준의 단계별 풀어보기 1단계를 마..

torotoblog.tistory.com