1 minute read

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

  1. Input : a = 1, b = 2
  2. Output : 3

입출력 예 #2

  1. Input : a = 2, b = 3
  2. Output : 5

문제 풀이

  1. 전가산기 구현
  2. 좀 더 간소한 구현
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