Skip to content

Commit 972ef03

Browse files
authored
Merge pull request #1536 from hi-rachel/main
[hi-rachel] WEEK 09 solutions
2 parents 76098e6 + 8178eb7 commit 972ef03

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

โ€Žsum-of-two-integers/hi-rachel.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"""
2+
+, - ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ 
3+
์ •์ˆ˜ a, b์˜ ํ•ฉ์„ ๊ตฌํ•ด๋ผ
4+
"""
5+
6+
# ์ฒ˜์Œ ๋‹จ์ˆœ ํ’€์ด
7+
class Solution:
8+
def getSum(self, a: int, b: int) -> int:
9+
arr = [a, b]
10+
return sum(arr)
11+
12+
"""
13+
๋น„ํŠธ ์—ฐ์‚ฐ ํ’€์ด
14+
15+
ํŒŒ์ด์ฌ์—์„œ '&, ^, |, ~, <<, >>' ๋“ฑ์˜ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ๋ฉด,
16+
์ž๋™์œผ๋กœ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ๋‹ค.
17+
18+
carry = (a & b) << 1 = ์˜ฌ๋ฆผ์ˆ˜ ๊ณ„์‚ฐ
19+
& = ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋‘˜ ๋‹ค 1์ธ ๋น„ํŠธ๋งŒ 1
20+
<< 1 ์˜ฌ๋ฆผ์ˆ˜๋Š” ํ•œ์ž๋ฆฌ ์œ„๋กœ ์ด๋™
21+
22+
a = a ^ b = ๋ง์…ˆ์˜ ํ•ฉ ๊ณ„์‚ฐ
23+
^๋Š” XOR ์—ฐ์‚ฐ, ๋‘ ๋น„ํŠธ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ๋งŒ 1
24+
25+
(ํ•˜๋“œ์›จ์–ด ๊ฐ€์‚ฐ๊ธฐ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•)
26+
def add(a, b):
27+
while b != 0: # ๋”์ด์ƒ ์˜ฌ๋ฆผ์ˆ˜๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€
28+
carry = (a & b) << 1 # ์˜ฌ๋ฆผ์ˆ˜
29+
a = a ^ b # ์˜ฌ๋ฆผ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ์ž๋ฆฌ ํ•ฉ
30+
b = carry
31+
return a
32+
33+
์Œ์ˆ˜ ๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด 32 ๋น„ํŠธ ๋งˆ์Šคํฌ ์ฒ˜๋ฆฌ ํ•„์š”
34+
ํŒŒ์ด์ฌ์—์„œ๋Š” ์–‘์ˆ˜ 0xFFFFFFFF (32๋น„ํŠธ ๊ธฐ์ค€ -1) ๋„ 4294967295 ๋ผ๊ณ  ๋‚˜์˜ด.
35+
ํ•˜์ง€๋งŒ C๋‚˜ Java์—์„  0xFFFFFFFF๋Š” -1, 32๋น„ํŠธ signed ์ •์ˆ˜ ์ฒด๊ณ„๋กœ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด์•ผ ํ•จ.
36+
๋งŒ์•ฝ a > MAX_INT๋ผ๋ฉด, ์ด๊ฑด ์‚ฌ์‹ค ์Œ์ˆ˜์ธ ๊ฐ’์ด์–ด์•ผ ํ•จ
37+
38+
์ •์ˆ˜ (integer): ๊ทธ๋ƒฅ ์ˆซ์ž: ..., -2, -1, 0, 1, 2, ...
39+
signed integer (๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜): ์Œ์ˆ˜์™€ ์–‘์ˆ˜ ๋‘˜ ๋‹ค ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜
40+
unsigned integer (๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜): ์Œ์ˆ˜๋Š” ์—†๊ณ  0๊ณผ ์–‘์ˆ˜๋งŒ ํ‘œํ˜„ํ•˜๋Š” ์ •์ˆ˜
41+
42+
43+
a & 0xFFFFFFFF -> a์˜ ์ด์ง„ ํ‘œํ˜„์—์„œ ํ•˜์œ„ 32๋น„ํŠธ๋งŒ ๋‚จ๊ธฐ๊ณ , ์ƒ์œ„ ๋น„ํŠธ๋Š” ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“ ๋‹ค = 32๋น„ํŠธ ๋งˆ์Šคํฌ
44+
~(a ^ MASK) -> 32๋น„ํŠธ unsigned๋ฅผ signed๋กœ ๋ฐ”๊ฟˆ = ์Œ์ˆ˜ ๋ณต์›
45+
46+
~๋Š” ๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ๋ฐ˜์ „ํ•˜๋Š” ์—ฐ์‚ฐ
47+
"""
48+
49+
class Solution:
50+
def getSum(self, a: int, b: int) -> int:
51+
MASK = 0xFFFFFFFF # 32๋น„ํŠธ ๋งˆ์Šคํฌ์—์„œ ์ „๋ถ€ 1 (4,294,967,295)
52+
MAX_INT = 0x7FFFFFFF # 32๋น„ํŠธ signed ์ •์ˆ˜์—์„œ ์ตœ๋Œ“๊ฐ’ (2^31 - 1 = 2,147,483,647)
53+
54+
while b != 0:
55+
# ์ž„์‹œ ๋ณ€์ˆ˜์— carry ์ €์žฅ
56+
carry = (a & b) & MASK # 32 ๋น„ํŠธ๊ฐ€ ๋„˜์–ด๊ฐ€๋ฉด ์ƒ์œ„ ๋น„ํŠธ ์ž˜๋ผ๋ฒ„๋ฆผ, 32๋น„ํŠธ ์œ ์ง€
57+
a = (a ^ b) & MASK # 32๋น„ํŠธ ์œ ์ง€
58+
b = (carry << 1) & MASK # 32๋น„ํŠธ ์œ ์ง€
59+
60+
# a๊ฐ€ ์Œ์ˆ˜์ด๋ฉด ๋ณด์ •
61+
return a if a <= MAX_INT else ~(a ^ MASK)

0 commit comments

Comments
ย (0)