[백준/파이썬] 12833번 XORXORXOR 풀이

업데이트:



문제 정보


풀이

문제

세 수 A, B, C를 입력 받은 다음, ( ( ( ( A XOR B ) XOR B ) XOR B ) … ) XOR B 형태로 연산을 C회 했을 때의 결과값을 출력하는 프로그램을 작성하시오.

코드

a,b,c=map(int, input().split())
for i in range(c%2):a^=b
print(a)

설명

이산수학 문제입니다.

XOR 연산이란, 두 피연산자의 bit가 다르면 1, 같으면 0입니다.

X Y X xor Y
0 0 0
0 1 1
1 0 1
1 1 0

파이썬에서의 xor은 ^ 기호를 연산자로 사용합니다.

B=0인 경우

0^0=1, 1^0=1로 bit가 계속 변하는 것을 알 수 있습니다.

B=1인 경우

0^1=1, 1^1=0으로 bit가 계속 변하는 것을 알 수 있습니다.

여기서 주목해야 할 것은, n번째 결과는 n+2번째 결과와 같다는 것입니다.

만약 109번의 연산을 직접 하게되면 제아무리 빠른 비트연산이라도 시간 초과가 날 것입니다.

따라서, 위에서 도출한 대로 연산 횟수가 몇번인지를 바탕으로 계산식을 압축하여 상수시간 내에 푸는 것이 정답입니다.



댓글남기기