유한 집합 {0,1,....n-1} 위의 이항연산은 (nxn)-2차원 배열로 표시할 수 있습니다.
예컨대 i와 j의 연산값을 i * j = a[i][j] 로 주면 됩니다.
문제 1: (매우 쉬움) 특정한 2차원 (nxn)-배열로 주어진 연산이 교환법칙을 만족하는지 판별하는 함수를 작성하세요.
문제 2: (조금 어려움) 연산이 닫혀 있을 때 앞서 주어진 배열에 대하여 삼항 연산이 다음의 두가지 방법으로 정의될 수 있습니다. m_1(i,j,k) := (i*j)*k, m_2(i,j,k) := i*(j*k) 위의 두 삼항연산이 같은 경우 결합법칙이 성립한다고 합니다. 앞서 주어진 배열의 원소가 {0,1,...,n-1} 으로 주어질 때, 배열로 주어진 이항연산이 결합법칙을 만족하는지 판별하는 함수를 작성하세요.
package d238_commutative_associated;
public class CommutativeLaw {
int op1(int a, int b) {
return a*b;
}
public static void main(String[] args) {
CommutativeLaw cl = new CommutativeLaw();
int n=10;
boolean result=true;
int i, j;
for(i=0; i<n; i++) {
for(j=0; j<n; j++)
if(cl.op1(i, j)!=cl.op1(j, i)) {
result=false;
break; //별 의미 없음.
}
}
System.out.println(result);
}
}
package d238_commutative_associated;
public class AssociatedLaw {
int op2(int a, int b) {
return a*b;
}
public static void main(String[] args) {
AssociatedLaw al = new AssociatedLaw();
int n=10;
boolean result=true;
int i, j, k;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
for (k=0; k<n; k++) {
if( al.op2( al.op2(i, j), k) != al.op2(i, al.op2(j, k) ) ) {
result=false;
break; //별 의미 없음.
}
}
System.out.println(result);
}
}
풀이 작성
코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.