[ 문제 ]
패리티 검사법은 메시지를 주고받을 때 메시지가 패리티 성질을 가지고 있을 경우엔 메시지가 제대로 도착을 하였다 보고 그렇지 않을 경우 메시지가 제대로 도착을 하지 않았다고 판별을 하는 메시지 전송시의 오류 판별 및 교정을 하는 방법을 말한다.
불리언 행렬의 각각의 열과 각각의 행이 짝수 합을 가질 때 패리티 성질을 가지고 있다고 하자.
다시 말하자면 한 집합에 짝수개의 1이 있다는 이야기 이다.
아래는 패리티 성질을 가진 4 x 4의 행렬이다.
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
각각의 행의 합은 2, 0, 4, 2 이고 열의 합은 2, 2, 2, 2 이다.
당신이 할일은 행렬의 정보를 읽어서 이것이 패리티 성질을 가지고 있는지 없는지 판단해야한다. 만약 그렇지 않을 경우 하나의 비트를 바꿔서 이 행렬이 패리티 성질을 가질 수 있는가 확인하고 그렇지 않을 경우 행렬은 잘못된 행렬이라고 판단한다.
[ 입력형식 ]
- 첫줄에는 행렬의 크기인 n(n<100) 이 입력되며 n개의 줄에 n개의 0혹은 1이 입력된다.
[ 출력형식 ]
- 만약 행렬이 패리티 성질을 가질 경우 "OK"라 출력하고 하나의 비트만을 변경해서 패리티 성질을 가질 경우 바꿔야 될 비트가 있는 i행 j열 에 대해 "Change bit (i,j)" 라 출력하며 두 경우에 해당되지 않을 때는 "Corrupt"라고 출력한다.
- * 주의 - 각각의 행과 열은 1부터 시작한다.
[ 입력 예 ]
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
[ 출력 예 ]
OK
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 행렬 크기
int[][] matrix = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++)
matrix[i][j] = Integer.parseInt(st.nextToken());
}
int row = 0, column = 0; // 바꿔야 할 행 인덱스, 열 인덱스
int rowCount = 0, columnCount = 0;
for (int i = 0; i < N; i++) {
int rowSum = 0;
int columnSum = 0;
for (int j = 0; j < N; j++){
rowSum += matrix[i][j];
columnSum += matrix[j][i];
}
if (rowSum % 2 != 0) {
row = i;
rowCount++;
}
if(columnSum % 2 != 0) {
column = i;
columnCount++;
}
}
if (rowCount == 0 && columnCount == 0) System.out.println("OK");
else if (rowCount == 1 && columnCount == 1) System.out.println("Change bit (" + (row+1) + "," + (column+1) + ")");
else System.out.println("Corrupt");
}
}
'Algorithm > 백준+프로그래머스+SWEA+정올+구름' 카테고리의 다른 글
[Algorithm] 백준 2309 일곱 난쟁이 (0) | 2021.08.29 |
---|---|
[Algorithm] 백준 2527 직사각형 (0) | 2021.08.29 |
[Algorithm] SWEA 6485 삼성시의 버스 노선 (0) | 2021.08.28 |
[Algorithm] SWEA 7964 부먹왕국의 차원 관문 (0) | 2021.08.27 |
[Algorithm] SWEA 5356 의석이의 세로로 말해요 (0) | 2021.08.27 |