Skip to content

Commit 10b7564

Browse files
committed
solve(w09): 371. Sum of Two Integers
1 parent bf3f9cb commit 10b7564

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# https://leetcode.com/problems/sum-of-two-integers/
2+
3+
class Solution:
4+
def getSum(self, a: int, b: int) -> int:
5+
"""
6+
[Complexity]
7+
- TC: O(1)
8+
- SC: O(1)
9+
10+
[Approach]
11+
๋ง์…ˆ ๊ตฌํ˜„ ์‹œ ์ฃผ์š”ํ•œ ์š”์†Œ๋Š” carry์™€ value ๊ฐ’์ด๋‹ค.
12+
์˜ˆ๋ฅผ ๋“ค์–ด ์ด์ง„์ˆ˜ 11๊ณผ 101์˜ ๋ง์…ˆ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๊ฐ ์ž๋ฆฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” carry์™€ value๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
13+
a = 0 1 1
14+
b = 1 0 1
15+
---------------
16+
value) 1 1 0 (= a ^ b)
17+
carry) 0 0 1 (= a & b)
18+
์ด๋•Œ, ์–ด๋–ค ์ž๋ฆฌ์—์„œ ๋ฐœ์ƒํ•œ carry๋Š” ํ•œ ์นธ left shift ๋˜์–ด ๋‹ค์‹œ ๋ง์…ˆ์„ ์ˆ˜ํ–‰ํ•˜๋“ฏ ์ ์šฉ๋˜์–ด์•ผ ํ•จ์— ์ฃผ์˜ํ•œ๋‹ค.
19+
value) 1 1 0
20+
carry) 0 0 1 0 (<<= 1)
21+
22+
์ด ๊ณผ์ •์„ carry๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด๋‚˜๊ฐ„๋‹ค.
23+
value) 0 1 0 0 (= a ^ b)
24+
carry) 0 1 0 0 (= (a & b) << 1)
25+
26+
value) 0 0 0 0 (= a ^ b)
27+
carry) 1 0 0 0 (= (a & b) << 1)
28+
29+
value) 1 0 0 0 (= a ^ b) -> RESULT
30+
carry) 0 0 0 0 (= (a & b) << 1) -> END
31+
32+
ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์—์„œ๋Š” int๋ฅผ 32bit ๋ณด๋‹ค ํฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฏ€๋กœ ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด ๋‹ค์Œ์˜ ์ž‘์—…์„ ์ถ”๊ฐ€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
33+
- ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด carry๊ฐ€ 32bit๋ฅผ ๋„˜์–ด์„œ๋„ ๊ณ„์† ๋”ํ•ด์งˆ ๊ฒƒ์ด๋ฏ€๋กœ, while ๋ฌธ ์กฐ๊ฑด์‹์—์˜ carry์— 32bit masking์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
34+
- (b & mask) == 0์ด์ง€๋งŒ b > 0์ธ ๊ฒฝ์šฐ์—๋Š” a์˜ 32bit ๋ฒ”์œ„ ๋ฐ–์— overflow๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ๊ฒฐ๊ณผ ๊ฐ’์—๋„ 32bit masking์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
35+
"""
36+
37+
mask = 0xffffffff # 32bit masking
38+
39+
# carry๊ฐ€ 0์ด ๋  ๋–„๊นŒ์ง€ ๋ฐ˜๋ณต (์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ, 32bit masking ํ›„ ํ™•์ธ)
40+
while (b & mask) != 0:
41+
a, b = a ^ b, (a & b) << 1 # value, carry
42+
43+
return (a & mask) if b > 0 else a # ์Œ์ˆ˜ (overflow) ์ฒ˜๋ฆฌ

0 commit comments

Comments
ย (0)