Skip to content

Commit 9b492e4

Browse files
committed
Add 32-bit masking to fix Python infinite loop (Sum of two integers)
1 parent 8f04910 commit 9b492e4

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

โ€Žsum-of-two-integers/KwonNayeon.pyโ€Ž

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,24 @@
1616
- ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ณ„์† ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋‹ค ๊ฒฐ๊ตญ ์‚ฌ๋ผ์ง
1717
- ์บ๋ฆฌ๊ฐ€ 0์ด ๋˜๋ฉด ๋ฃจํ”„ ์ข…๋ฃŒ
1818
"""
19-
# Solution 1: ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ฒ„์ „
19+
# Solution 1
2020
class Solution:
2121
def getSum(self, a: int, b: int) -> int:
2222
while b:
23-
# XOR: ์–ด๋””์„œ ์บ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธ
24-
current_sum = a ^ b
25-
26-
# AND: ์บ๋ฆฌ๋ฅผ ๋‹ค์Œ ์ž๋ฆฌ๋กœ ์˜ฌ๋ฆผ
27-
next_carry = (a & b) << 1
28-
29-
a = current_sum
30-
b = next_carry
23+
a, b = a ^ b, (a & b) << 1
3124

3225
return a
33-
34-
# Solution 2: ์ตœ์ ํ™” ๋ฒ„์ „
26+
27+
# Solution 2: ์Œ์ˆ˜ ์ผ€์ด์Šค ์ฒ˜๋ฆฌ
3528
class Solution:
3629
def getSum(self, a: int, b: int) -> int:
37-
while b:
38-
a, b = a ^ b, (a & b) << 1
30+
mask = 0xffffffff # 32๋น„ํŠธ ๋งˆ์Šคํ‚น
3931

40-
return a
32+
while b & mask:
33+
# ์บ๋ฆฌ ์—†๋Š” ๋ง์…ˆ + 32๋น„ํŠธ ์ œํ•œ, ์บ๋ฆฌ ๊ณ„์‚ฐ + 32๋น„ํŠธ ์ œํ•œ
34+
a, b = (a ^ b) & mask, ((a & b) << 1) & mask
35+
36+
# a <= 0x7FFFFFFF: ์–‘์ˆ˜์ผ ๋•Œ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜(0x7FFFFFFF = 32๋น„ํŠธ ์ตœ๋Œ€ ์–‘์ˆ˜)
37+
# a > 0x7FFFFFFF: ์Œ์ˆ˜์ผ ๋•Œ Python ์Œ์ˆ˜๋กœ ๋ณ€ํ™˜
38+
return a if a <= 0x7FFFFFFF else a | (~mask)
4139

0 commit comments

Comments
ย (0)