Byte Me!
시간 제한2초메모리 제한512 MB
N개의 데이터 바이트와 패리티 바이트가 주어질 때, 패리티 종류와 1의 개수가 어긋난 데이터 바이트, 뒤집힌 비트 위치를 찾는다.
문제
패리티는 데이터 전송에서 오류를 검사하는 방법이다. 전송 과정이 완벽하지 않으므로, 패리티로 데이터가 도중에 손상됐는지 확인한다.
짝수 패리티를 쓰면 모든 바이트에서 문자 1의 개수가 짝수다. 홀수 패리티를 쓰면 모든 바이트에서 문자 1의 개수가 홀수다.
이 문제에서는 손상된 비트 하나를 찾는다. 입력의 마지막 바이트는 전송된 데이터가 아니라 패리티 바이트다. 패리티 바이트의 번째 비트는 데이터 바이트 개의 번째 비트에 대한 패리티 비트이고, 데이터 바이트와 같은 패리티를 쓴다. 즉 모든 자리 에서 데이터 바이트 개의 번째 비트와 패리티 바이트의 번째 비트를 함께 세면 사용 중인 패리티와 맞는다.
데이터 바이트 중 정확히 한 비트가 뒤집혔다. 그 바이트는 문자 1의 개수가 사용 중인 패리티와 어긋나는 유일한 데이터 바이트이고, 뒤집힌 자리는 열의 패리티가 어긋나는 유일한 자리다. 사용 중인 패리티와 손상된 바이트, 손상된 비트를 찾아 출력한다.
입력
첫째 줄에 데이터 바이트의 개수 이 주어진다 (). 다음 개 줄에는 각각 바이트 하나가 공백 하나로 구분된 문자 8개로 주어진다. 각 문자는 0 또는 1이다.
그다음 한 줄에 같은 형식으로 패리티 바이트가 주어진다. 패리티 바이트의 번째 비트는 앞선 개 줄의 번째 자리에 대한 패리티 비트이고, 데이터 바이트와 같은 패리티를 쓴다. 패리티 바이트 자체에 들어 있는 문자 1의 개수는 그 패리티와 맞지 않아도 된다.
출력
세 줄을 출력한다.
- 첫째 줄: 손상되지 않은 바이트가 짝수 패리티를 쓰면
Even, 홀수 패리티를 쓰면Odd. - 둘째 줄:
Byte B is broken.B는 손상된 바이트의 번호이고, 첫 데이터 바이트가 1번이다. - 셋째 줄:
Bit C is broken.C는 바이트 안에서 손상된 비트의 자리 번호이고, 가장 왼쪽이 1번이다.