본문 바로가기

Coding Tests/코드업

코드업 1053번(참 , 거짓 바꾸기)

1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때
반대로 출력하는 프로그램을 작성해보는 문제이다.

 

내가 처음 접근했던 풀이이다. 1이든 2든 0이 아닌 수를 입력하면 0이 출력이 되는데, 0을 입력했을 때도 0이 나온다.

그 이유는 if의 조건식 성립이 잘 못되었기 때문이라고 생각한다.

#include<stdio.h>
int main(void)
{
    int a;
    scanf("%d", &a);
    if (a = 0)
        printf("1");
    else
        printf("0");
    return 0;
}

 

<정답풀이>

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

논리 연산자 ! 을 통해 단순히, 변수 a 앞에! 를 써주는 것만으로도, 참이면 거짓을, 거짓이면 참을 반환하여 줄 수 있다.

 

우리 C언어에서는, 0이 아닌 모든 값을 참으로 간주한다!

거짓을 의미하는 숫자는 유일하게 0 하나이고, 0이 아닌 모든 수가 참으로 인식이 되지만, 그중에서도 참을 의미할 때 주로 사용하는 수가 1이고, 그래서 연산의 결과로 참이 반환되어야 할때 1이 반환되는 것일 뿐이다.

 

<참고>

#include<stdio.h>
int main(void)
{
    int a;
    scanf("%d", &a);
    if (a == 0)
        printf("1");
    else
        printf("0");
    return 0;
}

제일 처음 오답 풀이가 올바른 풀이가 되기 위해서는 조건식에 단순 대입 연산자가 아닌 관계를 설명해줄 수 있는 관계 연산자가 들어가야 알맞은 출력 결과가 나올 수 있다.