CodeUp C언어 기초 100제 [기초 - 논리연산] 1053~1058

jychan99·2021년 8월 19일
0
post-thumbnail
  1. 1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때
    반대로 출력하는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int bool;
    scanf("%d",&bool);
    printf("%d",!bool);
    return 0;
}

!는 not으로 0은 1이되고 1은 0이된다

  1. 두 개의 참(1) 또는 거짓(0)이 입력될 때,
    모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    if(x==1 && y==1)
    printf("%d",1);
    else
    printf("0");
    return 0;
}

if문에서 그리고(and)을 사용할때
if(x==1, y==1)으로 착각하기쉬운데 (실제로 처음배울때 이렇게쓰다가 오류났음) 꼭 &&로 써줘야한다.
and의 의미는 둘다 참->참 이다.

  1. 두 개의 참(1) 또는 거짓(0)이 입력될 때,
    하나라도 참이면 참을 출력하는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    if(x==1 || y==1)
    printf("1");
    else
    printf("0");
    return 0;
}

if문에서 또는(or)을 사용할때 and와 마찬가지로 ||(백슬래시 2번)으로 써줘야한다.
의미는 둘중 하나라도 참->참 이다.

  1. 두 가지의 참(1) 또는 거짓(0)이 입력될 때,
    참/거짓이 서로 다를 때에만 참을 출력하는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    if(x!=y)
    printf("1");
    else
    printf("0");
    return 0;
}

나는 이렇게 풀었으나 이 문제의 요지는 XOR을 사용하는것이다.
XOR의 의미는 or인데 같으면 안된다
즉, 두개가 무조건 달라야 참 이다.

#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", a^b);
    return 0;
}

이렇게 푸는것이 더 정답에 가깝다.
연산기호는 ^

  1. 두 개의 참(1) 또는 거짓(0)이 입력될 때,
    참/거짓이 서로 같을 때에만 참이 계산되는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    if(x==y)
    printf("1");
    else
    printf("0");
    return 0;
}

이것역시 답은맞지만 문제의 의도와는 살짝 다른것같다.

#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", !(a^b));
    return 0;
}

XOR의 not을하면 둘다 같아야 참이된다.
and와는 다르다. and는 둘다 참이어야지 참이지만
!XOR은 참이든 거짓이든 두개가 같으면 참이된다.

  1. 두 개의 참(1) 또는 거짓(0)이 입력될 때,
    모두 거짓일 때에만 참이 계산되는 프로그램을 작성해보자.
#include <stdio.h>
main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    if(x==0 && y==0)
    printf("1");
    else
    printf("0");
    return 0;
}

나의 답

#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", !(a||b));
    return 0;
}

문제의 의도
사실 not XOR이던 not OR이던 쓰면 좋지만 다른방법으로도 충분히 표현할 수 있는것같다(아닌가?)

오늘 codeup C언어 기초 100제를 다풀었다. 다음에는 백준온라인에서 그리디 알고리즘을 공부할 예정이다. 코드업은 끝났어도 복습차원으로 올릴것이다. 포기하지말고꾸준히올리자
2021.6.8

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐍

0개의 댓글

관련 채용 정보