백준 웹사이트 "14681번 - 사분면 고르기" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#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이 아닌 모든 숫자라면 참으로 해석하므로 &와 &&을 혼동해서 사용하곤 합니다.
&와 &&가 조건문 안에 있을 때, 대부분의 경우 섞어 사용하셔도 큰 문제가 없지만, 양쪽 조건을 검사하는 방식에 차이가 있습니다. 양쪽 조건을 검사할 때, 비트연산자 '&'는 첫번째 조건의 참/거짓 여부와 관계 없이 양쪽 조건을 모두 검사하지만, 논리연산자 '&&'는 첫번째 조건이 거짓으로 판별나면 두 번째 조건은 겁사하지 않습니다. 복잡한 코드에서는 예기치 못한 에러의 원인이 되기도 하기에, 둘의 차이를 생각하며 사용하시면 좋겠습니다!
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 2739번 - 구구단 (0) | 2021.12.23 |
---|---|
[백준/C언어] 2884번 - 알람 시계 (0) | 2021.12.22 |
[백준/C언어] 2753번 - 윤년 (0) | 2021.12.22 |
[백준/C언어] 9498번 - 시험 성적 (0) | 2021.12.22 |
[백준/C언어] 1330번 - 두 수 비교하기 (0) | 2021.12.22 |