N×N 행렬 세 개 A_0, A_1, A_2가 주어진다.
집합 A=A_0, A_1, A_2라 하면, 이 집합에 포함된 세 행렬의 어떤 순열 X, Y, Z가 XY=Z이라는 조건을 만족할 때, 각 행렬은 다음과 같은 특성을 갖는다고 하자.
- X: 평문
- Y: 암호화 행렬
- Z: 암호문
이때 S(A_i∣A)를 집합 A에 속하는 원소 A_i의 특성들의 집합이라고 하자. (0≤i≤2)
예를 들어, A_0=(0 001), A_1=(1 000), A_2=(0 000), 그리고 A=A_0, A_1, A_2 라고 하자.
이때 A_0A_1=A_2, 그리고 A_1A_0=A_2 이다.
따라서, S(A_0∣A)=평문,암호화 행렬, S(A_1∣A)=평문,암호화 행렬, S(A_2∣A)=암호문 임을 알 수 있다.
이제 f(A_i∣A) (0≤i≤2)를 다음과 같이 정의하자.
f(A\_i | A) = 1 \times \left\[\textbf{평문} \in S(A\_i | A)\right] + 2 \times \left\[\textbf{암호화 행렬} \in S(A\_i | A)\right] + 4 \times \left\[\textbf{암호문} \in S(A\_i | A)\right]
여기서 \[condition]={1 0if conditionotherwise. 이다.
즉, 위의 예시에서
f(A_0∣A)=(1×1)+(2×1)+(4×0)=3,
f(A_1∣A)=(1×1)+(2×1)+(4×0)=3,
f(A_2∣A)=(1×0)+(2×0)+(4×1)=4 이다.
세 개의 N×N 행렬 A_0, A_1, A_2가 주어진다. A=A_0, A_1, A_2일 때, f(A_0∣A), f(A_1∣A),f(A_2∣A)을 구하는 프로그램을 작성하시오.