hy30nq's blog

1992 풀이 본문

개인 공부/CodeUp 문제 풀이

1992 풀이

hy30nq 2023. 12. 29. 15:33
728x90

https://codeup.kr/problem.php?id=1992

 

두 수의 합 (More)

첫 번째 줄에 정수 A와 B가 주어진다. (0<=A,B<=2147483647)

codeup.kr

 

풀이

함수의 작동 방식은 다음과 같습니다:

  1. 반복 (while) 루프: b가 0이 아닐 때까지 반복합니다. b가 0이 되면, a에 최종 합이 저장됩니다.
  2. 캐리 계산: carry = a & bab의 각 비트에 대해 AND 연산을 수행하여 캐리를 계산합니다. 이 캐리는 두 비트가 모두 1일 때 발생합니다 (이 경우 합산시 다음 자리로 1이 올라가게 됩니다).
  3. 합 계산: a = a ^ bab에 대해 XOR 연산을 수행하여 각 자리의 합을 계산합니다. XOR 연산은 두 비트가 서로 다를 때만 1을 반환하기 때문에, 캐리 없이 현재 자리의 합을 나타냅니다.
  4. 캐리 이동: b = carry << 1은 캐리를 한 자리 왼쪽으로 이동시킵니다. 이는 캐리를 다음 자리로 넘기는 작업에 해당합니다.
  5. 최종 합: b가 0이 될 때까지 이 과정을 반복하면, a에는 두 수의 최종 합이 저장됩니다.

예를 들어, a = 5 (101)b = 3 (011)의 합을 계산해보겠습니다:

  • 첫 번째 반복:
    • 캐리: 101 & 011 = 001
    • 합: 101 ^ 011 = 110
    • 캐리 이동: 001 << 1 = 010
  • 두 번째 반복:
    • 캐리: 110 & 010 = 010
    • 합: 110 ^ 010 = 100
    • 캐리 이동: 010 << 1 = 100
  • 세 번째 반복:
    • 캐리: 100 & 100 = 100
    • 합: 100 ^ 100 = 000
    • 캐리 이동: 100 << 1 = 1000
  • 네 번째 반복:
    • 캐리: 000 & 1000 = 000
    • 합: 000 ^ 1000 = 1000
    • 캐리 이동: 000 << 1 = 000

b가 0이 되었으므로, 최종 합은 a = 1000, 즉 8입니다. 따라서 5와 3의 합은 8이라는 것을 비트 연산으로 계산할 수 있습니다.

 

def add_without_operators(a, b):
    while b != 0:
        carry = a & b
        a = a ^ b
        b = carry << 1
    return a

input_str = input()
a, b = map(int, input_str.replace(',', ' ').split())
print(add_without_operators(a, b))

728x90

'개인 공부 > CodeUp 문제 풀이' 카테고리의 다른 글

1079 풀이  (0) 2023.12.29
1078 풀이  (1) 2023.12.29
1077 풀이  (1) 2023.12.28
1076 풀이  (0) 2023.12.28
1075 풀이  (0) 2023.12.28