본문 바로가기
악마와 천사이야기 - 두번째

천사와 악마이야기 두번째. 천사는 진실말을 말하며, 악마는 거짓말만 한다. 이때 A가 말했다. "나는 악마이거나 혹은 B는 천사이다"라고 말했다. 이때 A와 B는 각각 무엇인가?

Commented by highseek at 2009/12/14 23:43
A가 천사일 경우 B 역시 천사라고 가정하면
(A=악마 || B=천사) = TRUE 이므로, A=천사, B=천사

A가 악마일 경우
!(A=악마 || B=천사)
= ((A!=악마) && (B!=천사)) = TRUE여야 하는데, B에 상관없이 A가 악마라는 가정에 의해 전체 FALSE 이므로, A가 악마라는 가정에 모순.

즉, A는 천사, B도 천사.
Commented by at 2009/12/15 17:21
근데요? 그러면 A가 천사일경우에 자신이 악마라고 말해도 되는거에요? ("혹은"이 붙긴하지만)
Commented by highseek at 2009/12/15 21:56
자신이 악마라고 한 게 아니라 or이 붙었으므로, B가 천사이기만 하면 전체 수식은 "참"이 되니까요 :) 말로 하면 좀 이상하긴 한데, 수학적으로는 그래요.

참고로 C/C++ 같은 언어에서는 저런 수식을 조건문으로 걸면, B가 천사라는 게 확실하다면 A는 굳이 검사하지 않고 넘어갑니다.(오른쪽부터 검사하거든요) 그래서 어떤 일이 발생하냐면..

int a=0, b=0;
if(a++ || b++)
{ ... }
뭐 이렇게 코드를 짜면, 나중에 a와 b를 출력해보면 b는 1인데 a는 0이고 그렇죠 -_-;;
Commented by chatmate at 2009/12/15 22:21
highseek // 계산과정뿐만 아니라 연산순서 생각하는것까지 똑같네요. 프로그래머는 어쩔 수 없나;
Commented by highseek at 2009/12/15 23:29
...그, 그러게요..(...)

(이러면 몰랑몰랑이 아니잖아!;;)
Commented by 히언 at 2009/12/16 23:40
확실하게 설명해 주시는군요! 하이시크님
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -