그레이 코드
면접 대비시간 제한1초메모리 제한128 MB
주어진 n비트 이진 문자열에서 첫 비트는 그대로 두고 인접한 두 비트를 더해 올림을 버린 값으로 표준 그레이 코드를 구합니다.
문제
이진수는 밑이 인 수이고, 각 자리(비트)의 자릿값은 의 거듭제곱이다. 예를 들어 십진수 은 이진수로 인데, 다음이 성립하기 때문이다.
그레이 코드 수열은 이진값을 나열한 것으로, 각 값이 바로 앞 값과 정확히 한 비트만 다르다. 아래 표는 3비트 이진수의 표준 그레이 코드 수열이다.
이진수를 대응하는 표준 그레이 코드 값으로 바꾸는 방법은 아주 간단하다. 이진값 을 바꾼다고 하자. 먼저 첫 비트를 그대로 옮겨 적는다.
0 1 1
v
0
둘째 비트는 주어진 이진수의 첫째 비트와 둘째 비트를 더해서 얻는다. 합은 이다.
0 + 1 1
v
0 1
셋째 비트는 주어진 이진수의 둘째 비트와 셋째 비트를 더해서 얻는다. 합은 이진수로 이지만 올림은 버리므로 오른쪽 끝 비트인 만 취한다.
0 1 + 1
v
0 1 0
따라서 답은 이다.
일반적으로 첫 비트를 빼면, 표준 그레이 코드의 번째 비트는 주어진 이진수의 번째 비트와 번째 비트를 더한 뒤 올림을 버려서 얻는다. 올림을 버리는 덧셈은 다음 네 가지가 전부다.
0 0 1 1
+ 0 + 1 + 0 + 1
--- --- --- ---
0 1 1 0
비트 이진값을 대응하는 비트 표준 그레이 코드 값으로 바꾸는 프로그램을 작성하시오. 이다.
입력
입력은 두 줄이다.
- 첫째 줄에 비트 수 이 주어진다. 이다.
- 둘째 줄에 비트 이진수를 나타내는, 길이가 인 비트 문자열이 주어진다.
출력
주어진 비트 이진수에 대응하는 표준 그레이 코드를 길이 인 비트 문자열로 출력한다.