[코테] 리트코드 비트 조작 371. Sum of Two Integers
371. Sum of Two Integers
문제 링크
https://leetcode.com/problems/sum-of-two-integers/description/
문제 설명
Given two integers a and b, return the sum of the two integers without using the operators + and -.
제한 사항
- -1000 <= a, b <= 1000
입출력 예 #1
- Input : a = 1, b = 2
- Output : 3
입출력 예 #2
- Input : a = 2, b = 3
- Output : 5
문제 풀이
- 전가산기 구현
- 좀 더 간소한 구현
class Solution:
def getSum(self, a: int, b: int) -> int:
MASK = 0xFFFFFFFF
INT_MAX = 0x7FFFFFFF
a_bin = bin(a & MASK)[2:].zfill(32)
b_bin = bin(b & MASK)[2:].zfill(32)
result = []
carry = 0
sum = 0
for i in range(32):
A = int(a_bin[31 - i])
B = int(b_bin[31 - i])
# 전가산기 구현
Q1 = A & B
Q2 = A ^ B
Q3 = Q2 & carry
sum = carry ^ Q2
carry = Q1 | Q3
result.append(str(sum))
if carry == 1:
result.append('1')
# 초과 자리수 처리
result = int(''.join(result[::-1]), 2) & MASK
# 음수 처리
if result > INT_MAX:
result = ~(result ^ MASK)
return result
class Solution:
def getSum(self, a: int, b: int) -> int:
MASK = 0xFFFFFFFF
INT_MAX = 0x7FFFFFFF
# 합, 자릿수 처리
while b != 0 :
a, b = (a ^ b) & MASK, ((a & b) << 1) & MASK
# 음수 처리
if a > INT_MAX :
a = ~(a ^ MASK)
return a
Comments