논리 연산이란 참을 나타내는 논리값 1 과 거짓을 나타내는 논리값 0 을 다루는 연산을 말합니다. 이 문제에서는 다음의 두 가지 논리 연산자가 등장합니다.
|, OR): 양쪽의 두 값 중 한쪽이라도 1 이라면 연산의 결과는 1 입니다. 그렇지 않다면 연산의 결과는 0 입니다. 예시는 다음과 같습니다.
0|0 = 00|1 = 11|0 = 11|1 = 1&, AND): 양쪽의 두 값이 모두 1 이라면 연산의 결과는 1 입니다. 그렇지 않다면 연산의 결과는 0 입니다. 예시는 다음과 같습니다.
0&0 = 00&1 = 01&0 = 01&1 = 1이때, 논리값 개와 논리 연산자 개가 번갈아서 등장하는 문자열을 길이 의 논리식이라고 부릅니다. 모든 논리식은 대응되는 하나의 논리값을 가지며, 이는 다음과 같이 구할 수 있습니다.
이때 하나의 논리식에 같은 논리 연산자가 여러 번 등장한다면 그중 맨 왼쪽부터 순서대로 연산을 수행합니다.
예를 들어 논리식 0&1&1|0|1|1&1 에 대해 다음과 같이 대응되는 논리값을 구할 수 있습니다.
0&1&1|0|1|1&10&1|0|1|1&1 (0&1 을 0 으로 교체합니다.)0|0|1|1&1 (0&1 을 0 으로 교체합니다.)0|0|1|1 (1&1 을 1 로 교체합니다.)0|1|1 (0|0 을 0 으로 교체합니다.)1|1 (0|1 을 1 로 교체합니다.)1 (1|1 을 1 로 교체합니다.)따라서 0&1&1|0|1|1&1 에 대응되는 논리값은 1 입니다.
여러분이 해결해야 하는 문제는 다음과 같습니다.
여러분에게 길이 의 논리식이 주어집니다. 여러분은 이 논리식에 대해 다음 동작을 번 수행해야 합니다.
1 이었다면 0 으로, 0 이었다면 1 로 바뀝니다.이때 각 동작 후 논리식의 상태는 유지됩니다. 예를 들어 한 번의 동작으로 논리식 0&1&1|0|1|1&1 이 0&1&1|0|0|1&1 으로 바뀌었을 경우 그다음 동작은 논리식 0&1&1|0|0|1&1 에 수행합니다.
동작을 번 수행하면서, 각 동작을 수행한 후의 논리식에 대응되는 논리값을 구하는 프로그램을 작성해 주세요.
첫 번째 줄에 두 정수 과 가 공백으로 구분되어 주어집니다.
두 번째 줄에 길이 의 논리식이 공백 없이 주어집니다.
세 번째 줄에 수행해야 하는 동작을 나타내는 정수 가 공백으로 구분되어 주어집니다.
한 줄에 길이 의 문자열 를 출력합니다. 번째 동작 후 논리식에 대응되는 논리값이 1 이라면 는 '1', 0 이라면 는 '0'입니다.
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 17 | |
| 2 | 29 | |
| 3 | 54 | 추가 제약 조건이 없습니다. |
동작이 주어지기 전 논리식은 0&1&1|0|1|1&1 입니다. 각 동작 후
논리식과 대응되는 논리값은 다음과 같습니다.
0&1&1|0|0|1&1: 대응되는 논리값이 1 입니다.0&0&1|0|0|1&1: 대응되는 논리값이 1 입니다.1&0&1|0|0|1&1: 대응되는 논리값이 1 입니다.1&0&1|0|0|0&1: 대응되는 논리값이 0 입니다.1&0&1|0|0|0&0: 대응되는 논리값이 0 입니다.1&1&1|0|0|0&0: 대응되는 논리값이 1 입니다.1&1&1|1|0|0&0: 대응되는 논리값이 1 입니다.7 7 0&1&1|0|1|1&1 5 2 1 6 7 2 4
1110011