Skip to Content
독학사독학사 2단계논리회로11. 카르노맵 I: 기본 원리와 2·3·4변수 간소화

이번 문서의 목표: 이 파일을 다 읽으면 2·3·4변수 카르노맵을 직접 그리고, 진리표의 1을 격자에 옮겨 인접한 칸을 규칙에 맞게 묶어 최소 SOP를 손으로 구할 수 있다.

왜 카르노맵이 필요한가

09편에서 불 대수 법칙을 한 줄씩 적용해 논리식을 간소화하는 법을 배웠다. 하지만 이 방법에는 두 가지 약점이 있다. 첫째, 어떤 항끼리 묶어야 할지 스스로 판단해야 하므로 변수가 많아지면 시행착오가 늘어난다. 둘째, 지금 얻은 결과가 정말 더 이상 줄일 수 없는 최소형인지 확신하기 어렵다.

카르노맵(Karnaugh map, K-map)은 이 문제를 그림으로 해결한다. 진리표의 값을 특수한 순서로 배열된 격자에 옮겨 적으면, 어떤 항을 묶어야 하는지가 눈에 보이는 패턴으로 드러난다. 대수적 계산 없이 격자 위에서 사각형을 그리는 것만으로 10편에서 배운 표준 SOP를 최소형으로 바꿀 수 있다.

쉽게 말하면: 카르노맵은 진리표를 그림으로 바꿔서, 어떤 항끼리 묶어야 식이 짧아지는지 눈으로 바로 찾게 해주는 도구다.

카르노맵의 축은 왜 그레이 코드 순서인가

쉽게 말하면: 격자에서 옆으로 한 칸 움직이면 반드시 딱 1비트만 바뀌도록 만든 특수한 순서가 그레이 코드다.

카르노맵의 가로축·세로축은 그레이 코드(Gray code) 순서로 배열한다. 그레이 코드란 연속된 두 값 사이에 정확히 1비트만 달라지는 이진수 배열이다. 2비트 그레이 코드는 00, 01, 11, 10 순서다. 일반적인 이진수 순서인 00, 01, 10, 11과 다르다는 점이 핵심이다(01에서 10으로 넘어가면 두 비트가 동시에 바뀌므로 일반 순서는 카르노맵에 쓸 수 없다).

이렇게 배열하면 격자 위에서 물리적으로 붙어 있는 칸은 항상 논리적으로도 딱 1비트만 다르다. 두 최소항이 1비트만 다르다는 것은, 그 두 최소항을 OR로 묶었을 때 나머지 변수는 전부 같고 딱 그 1비트에 해당하는 변수만 X+X=1X+X'=1(보수법칙)로 소거된다는 뜻이다. 즉 카르노맵에서 이웃한 두 칸을 묶는 행위는, 09편에서 손으로 했던 “공통 인수로 묶고 보수법칙을 적용하는” 대수적 과정을 그림으로 대신하는 것이다.

자주 틀리는 점: 순서를 헷갈림

  • 가로축·세로축을 이진수 오름차순(00,01,10,11)으로 그리는 실수가 가장 흔하다. 이렇게 그리면 0110 칸이 옆에 붙어 있는데도 실제로는 2비트가 달라서, 그 두 칸을 묶으면 완전히 틀린 식이 나온다.
  • 그레이 코드는 항상 대칭이다. 4개 값이면 앞의 절반(00,01)을 그대로 두고 뒤의 절반을 거꾸로 뒤집어 붙인 것(11,10)이라고 기억하면 외우기 쉽다.

카르노맵의 원통 구조

쉽게 말하면: 카르노맵은 평평한 표가 아니라, 좌우 끝과 상하 끝이 서로 붙어 있는 도넛(원통) 모양이라고 생각해야 한다.

그레이 코드 순서로 배열한 맨 끝 값과 맨 처음 값도 1비트만 다르다(2비트 그레이 코드에서 마지막 10과 처음 00은 1비트 차이). 그래서 카르노맵은 맨 왼쪽 열과 맨 오른쪽 열이 서로 인접하고, 맨 위 행과 맨 아래 행도 서로 인접한 것으로 취급한다. 종이에 그리면 평평해 보이지만 실제로는 좌우를 붙이면 원통이 되고, 그 원통의 위아래를 다시 붙이면 도넛(토러스, torus) 모양이 된다.

자주 틀리는 점: 원통 구조를 놓침

  • 맨 왼쪽 열과 맨 오른쪽 열이 이웃이 아니라고 생각해 그 사이의 묶음을 놓치는 경우가 4변수 카르노맵에서 특히 자주 나온다. 네 모서리 칸이 모두 1이면, 이 네 칸도 하나의 유효한 4칸 묶음이다(원통·도넛 구조 덕분에 네 모서리가 서로 다 인접하기 때문이다).

2변수 카르노맵

2변수 함수는 2×22\times2 격자로 그린다. 가로축은 BB, 세로축은 AA를 그레이 코드 순서(2변수는 그냥 0, 1 두 값뿐이라 순서 문제가 없다)로 놓는다.

A\B01
0m0m_0m1m_1
1m2m_2m3m_3

각 칸에는 그 위치의 최소항 번호를 적어 두면 진리표와 맵을 대조하기 쉽다. m0=ABm_0=A'B', m1=ABm_1=A'B, m2=ABm_2=AB', m3=ABm_3=AB이다.

예제: F(A,B) = sum m(1,2,3)

A\B01
001
111

1단계: 1이 있는 칸을 확인한다

(A,B)=(0,1),(1,0),(1,1)(A,B)=(0,1), (1,0), (1,1) 세 칸이 1이다.

2단계: 가장 큰 사각형부터 묶는다

A=1A=1 행(두 칸 모두 1)을 하나의 2칸 묶음으로 묶는다. 이 묶음에서 BB는 0과 1이 섞여 소거되고 AA만 남는다. → AA

3단계: 남은 1을 확인한다

(0,1)(0,1) 칸은 아직 어떤 묶음에도 속하지 않았다. B=1B=1 열(두 칸 모두 1인지 확인)로 묶는다. (0,1)(0,1)(1,1)(1,1)이 2칸 묶음을 이루고, 이 묶음에서 AA가 소거되고 BB만 남는다. → BB

4단계: 묶음을 OR로 합친다

F=A+BF = A + B

결과 해석: (1,1)(1,1) 칸은 두 묶음(A행, B열)에 동시에 포함되었다. 카르노맵에서는 한 칸이 여러 묶음에 겹쳐 포함되어도 상관없다. 오히려 이렇게 겹치게 묶어야 각 묶음이 최대한 커져서 더 짧은 항이 나온다.

3변수 카르노맵

3변수는 2×42\times4 격자로 그린다. 세로축에 변수 1개(AA), 가로축에 변수 2개(BCBC)를 그레이 코드 순서(00,01,11,10)로 놓는다.

A\BC00011110
0m0m_0m1m_1m3m_3m2m_2
1m4m_4m5m_5m7m_7m6m_6

가로축이 00,01,11,10 순서이기 때문에 열 번호와 최소항 번호가 이진수 오름차순으로 나열되지 않는다는 점을 주의해야 한다(BC=10BC=10 열이 세 번째가 아니라 네 번째에 온다).

예제: F(A,B,C) = sum m(0,1,2,4,6)

A\BC00011110
01101
11001

1단계: 1의 위치를 표시한다

m0,m1,m2,m4,m6m_0, m_1, m_2, m_4, m_6 다섯 칸이 1이다.

2단계: 4칸 묶음을 먼저 찾는다

BC=00BC=00 열과 BC=10BC=10 열(두 열 모두 A=0,1A=0,1 행이 전부 1)이 4칸 묶음을 이룬다. 이 열들은 원통 구조상 카르노맵의 양 끝(00열과 10열)이지만, 표에서는 나란히 붙어 있으므로 그대로 눈으로 확인된다. 이 묶음에서 BB는 두 열 모두 0으로 고정, CC는 0과 0으로 고정(두 열 다 C=0C=0), AA는 0과 1이 섞여 소거된다. 잠깐, 다시 확인하면 BC=00BC=00B=0,C=0B=0,C=0이고 BC=10BC=10B=1,C=0B=1,C=0이므로 BB가 섞이고 CC만 고정된다. → 남는 변수는 CC'뿐이다.

3단계: 남은 1을 확인한다

m1=ABCm_1=A'B'C 칸이 아직 묶이지 않았다. 인접한 칸을 찾는다. m0=ABCm_0=A'B'C'm1m_1BC=00BC=00BC=01BC=01로 이웃하며 2칸 묶음이 된다. 이 묶음에서 AA는 둘 다 0으로 고정, BB는 둘 다 0으로 고정, CC는 0과 1이 섞여 소거된다. → ABA'B'

4단계: 묶음을 OR로 합친다

F=C+ABF = C' + A'B'

결과 해석: 원래 SOP는 5개의 3변수 곱항이 필요했지만 최소형은 2개 항(하나는 리터럴 1개, 하나는 리터럴 2개)으로 줄었다. 이처럼 카르노맵은 가장 큰 사각형부터 우선 찾는 것이 요령이다. 작은 묶음(1칸)부터 찾으면 더 큰 묶음으로 합칠 기회를 놓치기 쉽다.

4변수 카르노맵

4변수는 4×44\times4 격자로 그린다. 세로축에 ABAB, 가로축에 CDCD를 각각 그레이 코드 순서(00,01,11,10)로 놓는다.

AB\CD00011110
00m0m_0m1m_1m3m_3m2m_2
01m4m_4m5m_5m7m_7m6m_6
11m12m_{12}m13m_{13}m15m_{15}m14m_{14}
10m8m_8m9m_9m11m_{11}m10m_{10}

4변수 맵에서는 원통 구조가 가로 방향과 세로 방향 모두에 적용된다. 맨 왼쪽 열과 맨 오른쪽 열이 인접하고, 맨 위 행과 맨 아래 행도 인접한다. 따라서 네 모서리 칸(m0,m2,m8,m10m_0, m_2, m_8, m_{10})이 모두 1이면, 이 네 칸을 하나의 4칸 묶음으로 볼 수 있다(가로로 양 끝, 세로로 양 끝이 모두 붙어 있으므로).

예제: F(A,B,C,D) = sum m(0,2,5,7,8,10,13,15)

AB\CD00011110
001001
010110
110110
101001

1단계: 모서리 4칸을 확인한다

m0(AB=00,CD=00),m2(AB=00,CD=10),m8(AB=10,CD=00),m10(AB=10,CD=10)m_0(AB=00,CD=00), m_2(AB=00,CD=10), m_8(AB=10,CD=00), m_{10}(AB=10,CD=10) 네 모서리가 모두 1이다. 원통 구조에 의해 이 네 칸은 하나의 4칸 묶음이다. 각 칸의 변수 값을 정리하면 m0:A=0,B=0,C=0,D=0m_0: A=0,B=0,C=0,D=0 / m2:A=0,B=0,C=1,D=0m_2: A=0,B=0,C=1,D=0 / m8:A=1,B=0,C=0,D=0m_8: A=1,B=0,C=0,D=0 / m10:A=1,B=0,C=1,D=0m_{10}: A=1,B=0,C=1,D=0이다. AA는 0,0,1,1로 섞여 소거되고, CC는 0,1,0,1로 섞여 소거되지만, BB는 네 칸 모두 0으로 고정되고 DD도 네 칸 모두 0으로 고정된다. 고정된 두 변수만 남으므로 → BDB'D'

2단계: 가운데 4칸을 확인한다

m5(AB=01,CD=01),m7(AB=01,CD=11),m13(AB=11,CD=01),m15(AB=11,CD=11)m_5(AB=01,CD=01), m_7(AB=01,CD=11), m_{13}(AB=11,CD=01), m_{15}(AB=11,CD=11) 네 칸이 모두 1이며 서로 인접한 2×22\times2 사각형(가운데 블록)을 이룬다. 각 칸을 확인하면 BB는 1,1,1,1로 고정, DD는 1,1,1,1로 고정, AA는 0,0,1,1로 섞이고, CC는 0,1,0,1로 섞인다. → BDBD

3단계: 묶음을 OR로 합친다

여덟 개의 최소항이 정확히 두 개의 4칸 묶음으로 전부 커버되었으므로 더 이상 남은 칸이 없다.

F=BD+BDF = B'D' + BD

결과 해석: F=BD+BDF = B'D' + BD는 사실 BDB \oplus D의 보수인 XNOR(BBDD가 같을 때 1)와 정확히 같은 식이다(09편에서 배운 XNOR 진리표를 떠올려보면 BD+BDB'D'+BD가 바로 그 식이다). 8개의 4변수 최소항이 단 두 개의 2변수 항으로 줄어드는, 카르노맵의 효과를 극적으로 보여주는 예제다.

손계산 절차 정리

1단계: 진리표에서 1인 행(또는 0인 행)을 찾는다

SOP를 구하려면 1인 행을, POS를 구하려면 0인 행을 표시한다.

2단계: 변수 개수에 맞는 격자를 그린다

2변수는 2×22\times2, 3변수는 2×42\times4, 4변수는 4×44\times4이며, 축은 반드시 그레이 코드 순서로 배열한다.

3단계: 1(또는 0)을 격자에 옮긴다

진리표의 값을 대응하는 칸에 옮겨 적는다.

4단계: 가장 큰 사각형부터 묶는다

8칸 → 4칸 → 2칸 → 1칸 순서로, 2의 거듭제곱 크기만 가능하다는 것을 지키며 묶는다. 원통 구조(좌우·상하 인접)를 빠뜨리지 않는다.

5단계: 모든 1(또는 0)이 적어도 한 묶음에 포함될 때까지 반복한다

아직 어떤 묶음에도 속하지 않은 칸이 남아 있으면 3~4단계를 반복한다.

6단계: 각 묶음에서 변하지 않는 변수만 남기고 나머지를 소거한다

묶음 안에서 값이 0과 1로 섞이는 변수는 소거되고, 항상 같은 값을 유지하는 변수만 리터럴로 남는다.

7단계: 묶음들을 OR(SOP) 또는 AND(POS)로 합친다

SOP를 구했다면 각 묶음의 곱항을 OR로, POS를 구했다면 각 묶음의 합항을 AND로 묶는다.

자주 틀리는 점 총정리

  • 묶음 크기는 반드시 1, 2, 4, 8, 16처럼 2의 거듭제곱이어야 한다. 3칸이나 5칸, 6칸으로 묶으면 안 된다.
  • 큰 묶음을 놓치고 작은 묶음(1칸, 2칸)으로만 답을 내면 표준형에 가까운 형태가 나와 최소형이 아니게 된다. 항상 가장 큰 사각형부터 시도해야 한다.
  • 한 칸이 여러 묶음에 겹쳐 포함되는 것은 정상이며 오히려 권장된다. 겹치지 않게 나누려다 묶음 크기를 줄이는 것이 오히려 실수다.
  • 4변수 맵에서 네 모서리, 또는 위아래 두 행이나 좌우 두 열이 원통 구조로 인접한다는 것을 놓치는 경우가 매우 흔하다. 표의 물리적 배치만 보지 말고 항상 “그레이 코드 순서상 1비트 차이인가”를 기준으로 판단해야 한다.

핵심 정리

  • 카르노맵은 그레이 코드 순서(00,01,11,10)로 배열한 격자이며, 물리적으로 인접한 칸은 항상 논리적으로 1비트만 다르다는 성질을 이용해 최소항을 묶는다.
  • 카르노맵은 좌우·상하가 서로 이어진 원통(도넛) 구조이며, 4변수 맵에서는 네 모서리 칸도 서로 인접한 것으로 취급한다.
  • 손계산 절차는 진리표 옮기기 → 가장 큰 사각형(2의 거듭제곱 크기)부터 묶기 → 모든 1을 커버할 때까지 반복 → 변하지 않는 변수만 남기기 → OR(또는 AND)로 합치기의 순서로 진행한다.

마무리 복습

문제 14지선다
카르노맵의 가로축·세로축을 그레이 코드 순서로 배열하는 이유로 가장 적절한 것은?
문제 24지선다
4변수 카르노맵에서 네 모서리 칸이 모두 1일 때 이를 묶을 수 있는 이유는?
문제 34지선다
카르노맵에서 4칸(2x2) 묶음을 만들었을 때 일어나는 일로 옳은 것은?
문제 44지선다
3변수 함수 F = sum m(0,1,4,5)를 카르노맵으로 간소화한 결과로 옳은 것은?
문제 54지선다
카르노맵으로 최소 SOP를 구할 때 지켜야 할 원칙으로 옳지 않은 것은?
문제 64지선다
2변수 카르노맵에서 F = sum m(0,1,2)를 간소화한 결과로 옳은 것은?

참고 자료

Last updated on