본문 바로가기

코딩/백준 BOJ

[백준/C언어] 14681번 - 사분면 고르기

백준 웹사이트 "14681번 - 사분면 고르기" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

14681번: 사분면 고르기

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int x, y;
    scanf("%d %d", &x, &y);

    if (x>0 & y>0)
        printf("1");
    else if(x<0 & y>0)
        printf("2");
    else if(x<0)
        printf("3");
    else
        printf("4");
}

문제 풀이

  '&(AND)'가 조건문에 있을 때, '두 조건이 모두 해당되면'을 의미합니다. 이를 이용하여 각 조건문을 작성해주시면 됩니다.


참고

'&'와 '&&'는 어떤 차이가 있을까요?

  위의 소스 코드에서, '&'의 자리에 '&&'를 사용해주어도 지장이 없습니다. 하지만 둘이 실제로 의미하는 바가 조금 다르기에, 그 차이를 간략히 알아보겠습니다.

  '&' 는 비트연산자로, 비트(bit) 형태의 숫자들을 비교, 계산하여 값을 냅니다. '&'의 경우, 두 비트 모두 1일 경우에만 1의 값을 내는 비트연산자입니다. Line 7을 보면 조건문이 'x>0 & y>0'인데, x>0과 y>0 각각 참이면 1, 거짓이면 0이 되며, 이들에 비트연산(&)을 시행하여 참/거짓을 결정합니다.

  '&&'는 논리연산자로, 양쪽 항이 모두 참일 경우에만 결과 값이 참이 됩니다. 이때 결과값은 무조건 0(거짓) 또는 1(참)이 된다는 것이 비트연산자 &와의 차이점이 되겠습니다. 비트연산자 &는 실제로 연산을 시행하기 때문에, 결과 값이 0 또는 1이 아닌 숫자가 될 수 있습니다. 하지만 C언어는 0이면 거짓, 0이 아닌 모든 숫자라면 참으로 해석하므로 &와 &&을 혼동해서 사용하곤 합니다.

  &와 &&가 조건문 안에 있을 때, 대부분의 경우 섞어 사용하셔도 큰 문제가 없지만, 양쪽 조건을 검사하는 방식에 차이가 있습니다. 양쪽 조건을 검사할 때, 비트연산자 '&'는 첫번째 조건의 참/거짓 여부와 관계 없이 양쪽 조건을 모두 검사하지만, 논리연산자 '&&'는 첫번째 조건이 거짓으로 판별나면 두 번째 조건은 겁사하지 않습니다. 복잡한 코드에서는 예기치 못한 에러의 원인이 되기도 하기에, 둘의 차이를 생각하며 사용하시면 좋겠습니다!

반응형