반응형
문제
세 수 A, B, C를 입력 받은 다음, ( ( ( ( A XOR B ) XOR B ) XOR B ) … ) XOR B 형태로 연산을 C회 했을 때의 결과값을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 주어진다. (0 < A, B, C ≤ 109)
출력
첫째 줄에 계산된 결과를 출력한다.
예제 입력13 3 1 |
예제 출력14 |
풀이
지문대로 xor을 c회 연산하는 코드는 다음과 같다.
a,b,c = map(int,input().split())
for i in range(c):
a ^= b
print(a)
이렇게 한다면 답은 올바르게 나오지만, 109의 연산 횟수로 인해 시간초과가 발생하게 된다.
따라서 일정한 패턴을 찾아줘야 한다.
입력된 a,b가 이진수로 다음과 같다고 하자.
a = 1 1 0 1
b = 1 0 1 1
문제에 나와있는 대로 a와 b의 XOR 연산 결과를 계속하여 b로 XOR 연산해보도록 하자.
0 1 1 0
1 1 0 1
0 1 1 0
1 1 0 1
…
두 가지 패턴만 반복되어 나타나는 것을 알 수 있다.
따라서 우리가 수행해야 할 연산은 사실 딱 두 번이면 충분한 것이다!
이를 기록하여 주고 c가 짝수냐 홀수냐에 따라 결과를 출력하도록 하자.
a,b,c = map(int,input().split())
r = [a^b, (a^b)^b]
print(r[0] if c%2 == 1 else r[1])
반응형
'알고리즘 연습 > 기초 (입출력 등)' 카테고리의 다른 글
[🥉4 / 백준 2525 / 파이썬] 오븐 시계 (0) | 2021.09.24 |
---|---|
[🥉3 / 백준 10409 / 파이썬] 서버 (0) | 2021.08.27 |
[🥉4 / 백준 10797 / 파이썬] 10부제 (0) | 2021.08.21 |
[🥉3 / 백준 2455 / 파이썬] 지능형 기차 (0) | 2021.08.21 |
[🥉3 / 백준 10824 / 파이썬] 네 수 (0) | 2021.08.16 |