[2026. 임용 정보ㆍ컴퓨터] 부울곱 C 프로그램

부울곱 C 프로그램

정답

㉠ des[i][j] = 0;
㉡ arr1[i][k] && arr2[k][j]
㉢ 출력: 0 1
㉣ 출력: 0 1

출제 의도

2차원 배열로 표현된 행렬 A, B에 대해 부울곱 \(C = A \circ B\)를 계산하는 C 프로그램의 동작을 이해하고, 반복문 안에서 부울곱을 구현하는 코드를 완성할 수 있는지를 묻는다. 또한 주어진 두 행렬의 부울곱을 실제로 계산하여 출력 결과를 구하는 능력을 평가한다.

풀이 과정

부울곱 \(C = A \circ B\)가 다음과 같이 정의되어 있다고 했다.

$$ c_{ij} = (a_{i1} \land b_{1j}) \lor (a_{i2} \land b_{2j}) \lor \cdots \lor (a_{im} \land b_{mj}) $$

여기서 \(\land\)는 논리곱, \(\lor\)는 논리합이다. 이를 C 코드로 옮기면 각 원소 \(c_{ij}\)는 0으로 초기화하고, 인덱스 \(k\)를 0에서 2까지 바꾸어 가며 \(a_{ik} \land b_{kj}\)를 OR로 누적하면 된다.

따라서 (i, j)마다 결과 배열을 0으로 초기화하는 코드가 필요하므로 ㉠에는

des[i][j] = 0;

이 들어가야 한다.

또한 반복문 안에서 누적하여 OR을 취할 항은 \(a_{ik} \land b_{kj}\)이므로, C에서 논리곱과 논리합 연산자를 사용하면

des[i][j] = des[i][j] || (arr1[i][k] && arr2[k][j]);

가 되어야 한다. 따라서 괄호 안 ㉡에는

arr1[i][k] && arr2[k][j]

가 들어간다.

이제 실제 행렬 값을 이용해 부울곱을 계산한다.

행렬 \(A\)와 \(B\)는 각각 다음과 같다.

$$ A = \begin{pmatrix} 1 & 0 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \end{pmatrix}, \quad B = \begin{pmatrix} 0 & 0 & 1 \\ 1 & 1 & 0 \\ 0 & 1 & 0 \end{pmatrix} $$

먼저 \(C = A \circ B\)를 계산한다.

$$ C_{00} = (1\land0)\lor(0\land1)\lor(0\land0) = 0 \\ C_{02} = (1\land1)\lor(0\land0)\lor(0\land0) = 1 $$

따라서 c[0][0], c[0][2]는 각각 0, 1이므로 ㉢ 출력은

0 1

이다.

다음으로 \(D = B \circ A\)를 계산하면, 마찬가지 방식으로

$$ D_{00} = (0\land1)\lor(0\land1)\lor(1\land0) = 0 \\ D_{02} = (0\land0)\lor(0\land1)\lor(1\land1) = 1 $$

이 되어 d[0][0], d[0][2]도 각각 0, 1이 된다. 따라서 ㉣ 출력 역시

0 1

이 된다.

<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>