02. 두 번째 수업: “또는(OR)” 과 “그리고(AND)” 의 게이트 논리회로
분기점이 늘어나면 프로그래머의 뇌는 과부하가 걸립니다. 조건문이 두 개 이상 복합적으로 떨어졌을 때, 가지 수를 마구잡이로 합쳐야 할지(덧셈), 아니면 교차시켜 곱해야 할지(곱셈)! 이 두 개의 논리 스위치 칩셋을 확실하게 구분하지 못하면 멀티버스의 숫자는 와르르 오차를 내며 무너져 내립니다.
1. OR 게이트 (합의 법칙): 죽거나 살거나, 택일의 조건
“이거 아니면 저거!” 둘 중의 하나만 터져도 퀘스트 성공으로 인정해 주겠다는 가장 자비롭고 느슨한 조건 패스가 바로 파이썬의 or 연산자, 즉 ‘합의 법칙(+)’ 입니다.
퀘스트: 중국집에 들어갔다. [면류 4종류] 와 [밥류 3종류] 가 있다. 면이든 밥이든 상관없이 맛있는 요리 하나만 선택해서 먹을 거라면, 내가 뽑을 수 있는 총 선택 경우의 수는?
이 경우 “짜장면도 먹고 그 위에 동시에 볶음밥도 위장에 쑤셔 넣는” 중복 이벤트는 물리적으로 발생하지 않습니다(동시에 일어나지 않는 독립 분리 사건). 그냥 짜장면 뭉치 평행우주 $4$개 옆에다가, 볶음밥 평행우주 뭉치 $3$개를 박스로 옆에 이어서 붙이고 단순 덧셈 결합을 해버리면 끝납니다.
- 해킹 코드: 사건 $A$ 의 가지 수(4) $\mathbf{+}$ 사건 $B$ 의 가지 수(3) = $7$가지!
“~이거나(또는, OR)” 라는 텍스트가 떴다? 사건이 완전히 분리되어 따로 논다? 그러면 뇌를 비우고 주저 없이 $\mathbf{+}$ 더하기 기호만 박아 넣으십시오.
2. AND 게이트 (곱의 법칙): 잔혹한 동시 폭파 조건문
수학 확률에서 모가지를 쥐어 잡는 가장 빡센 검문 필터. ‘그리고(AND)’ 입니다. 둘 중 하나만 떨어져선 안 됩니다. 1번 사건이 일어나는 ‘그 순간 동시에 뒤따라서’ 2번 사건도 무조건 함께 엮여서 세트로 터져 줘야 스크립트가 인정받습니다.
퀘스트: 햄버거 가게에 들어갔다. [햄버거 3종류] 와 [음료수 4종류] 가 있다. 이건 세트 메뉴니까, 버거 하나 고르고 이어서 ‘반드시 달아서’ 음료수 하나를 짝지어 매칭시켜서 먹어야 하는 세트 조합 수(경우의 수) 는?
합의 법칙처럼 멍청하게 $(3+4=7)$ 합치면 큰일 납니다! 불고기 버거를 고른 평행우주 세계관 안으로 진입했다고 칩시다. 불고기 버거 입에 물고 콜라 마시기, 불고기+사이다, 불고기+오렌지, 불고기+물… 불고기 버거 단 한 개의 선택지만 열었을 뿐인데도, 그 뒤로 잔가지 트리가 4개나 더 쪼개져 팽창합니다. (치즈버거 세계관에서도 또 4갈래로, 치킨버거 세계관에서도 또 4갈래 트리가 터집니다!)
이럴 때는 각각의 잔가지수를 무자비하게 $\times$ 곱셈 으로 뻥튀기 팽창시켜야만 합니다!
- 해킹 코드: 사건 $A$ 가지 수(3) $\mathbf{\times}$ 사건 $B$ 가지 수(4) = $12$가지 콤보 세트!
파이썬의 이중루프 for 문(For 문 안에 또 For 문이 도는 것) 메커니즘이 바로 이 곱의 법칙을 그대로 재현한 충실한 노예 엔진입니다.
- 팁: “…을 하고 나서, 연이어서, 동시에, 짝지어, 각각…” 이라는 늪에 빠지게 하는 부사 텍스트가 뜨면 무조건! $\times$ (곱하기) 스위치를 찰칵 올리십시오!
3. 요약 필터 (뇌정지 올 때 꺼내볼 것)
- 두 사건이 절반 갈려, 따로따로 한 놈만 놀 때! $\rightarrow \mathbf{+}$ 더하라! (합의 법칙, OR)
- 두 사건이 거미줄처럼 연달아 얽혀 세트 메뉴 트리를 만들 때! $\rightarrow \mathbf{\times}$ 곱하라! (곱의 법칙, AND)
다음 페이지에서는 이 머릿속 과부하를 덜기 위해 가장 우아하게 미래 가지 수를 모니터에 가지런히 뿌리는 해커들의 드로잉 방식, [수형도 (Tree Diagram)] 그리는 법을 살펴봅니다.