- 1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때
반대로 출력하는 프로그램을 작성해보자.#include <stdio.h> main() { int bool; scanf("%d",&bool); printf("%d",!bool); return 0; }
!는 not으로 0은 1이되고 1은 0이된다
- 두 개의 참(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) 또는 거짓(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) 또는 거짓(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) 또는 거짓(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) 또는 거짓(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