티스토리 뷰

ETC

[이산수학] 해석하기 어려운 조건문 뒤집어서 풀기 (드모르간 법칙)

주인장 진빼이

드모르간 법칙

코드를 읽는 중에 조건문의 해석이 난해한 경우가 종종 있다.

특히 앞에 ! 가 붙는 경우 조건 해석이 일반적인 조건문하고 다르게 한번에 되지 않는다.

해석하기 어려운 조건문을 뒤집어서 풀게 되면 한층 더 쉬운 조건문으로 해석할 수 있다.

 

드모르간 법칙 증명은 여기를 참고하자

드모르간 법칙의 개념을 간단히 설명하자면

(제1법칙) '전체 논리곱(AND)의 부정'은 '각각의 논리합 부정'과 동일하다는 법칙이다.

(제2법칙) '전체 논리합의 부정'은 '각각의 논리곱 부정'과 동일하다는 법칙이다.

그림에서 X(논리곱)은 AND, +(논리합)은 OR

제 1법칙: !(A AND B) = !A OR !B

제 2법칙: !(C OR D) = (!C AND !D)

 

예문1

! (a == b and c == d)

위 코드를 보면 쉬워보이겠지만

두개의 주건 중 하나만 충족하는 경우 해당 조건이 만족하여 실행하는지 쉽게 파악하기 힘들다.

a와 b가 서로 다른 경우이면서 c와 d가 서로 다른 경우에 조건이 만족하여 실행하는건가 ?

 

이때, 조건을 반대로 뒤집어서 풀게되면 한눈에 보기 쉽고 이해하기 쉬운 조건이 완성된다.

 

조건을 반대로 뒤집어서 푸는 방법은 매우 간단하다.

앞에 있는 not으로 인해 안쪽에 있는 식에게 반대로 영향을 준다는 느낌으로 생각하도록 하자.

문자 및 숫자 데이터는 그대로 유지하고 조건식들을 0을 1로, 1을 0으로 뒤집는다는 느낌이다.

(not을 분배법칙 하는 느낌으로)

 

1. not * a ==b -> a != b

2. not * and -> or

3. not * c==d -> c != d

전체식: (a != b or c != d)

 

 

예문2

!(a <= b or b <= d)

똑같이 하나씩 풀어보자

not * a <= b -> a > b

not * or -> and

not * b <= d -> b > d

전체식: (a > b and b > d)

 

드모르간의 법칙을 통해 조건문을 뒤집어서 풀면 어려운 조건문도 쉽게 보인다.

 

got GPT도 쉽게 설명해준다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함