Skip to content

Commit f9bd36c

Browse files
Create taurus09318976.py
1 parent df20a1b commit f9bd36c

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
'''
2+
๋ฌธ์ œ์˜ ์˜๋„ :
3+
์ด ๋ฌธ์ œ๋Š” + ์™€ - ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‘ ์ •์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž„.
4+
์ปดํ“จํ„ฐ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ง์…ˆ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž„.
5+
6+
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :
7+
๋น„ํŠธ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•จ
8+
XOR (^): ์ž๋ฆฌ์ˆ˜๋ณ„ ๋ง์…ˆ (์˜ฌ๋ฆผ ์—†์ด)
9+
AND (&): + ์™ผ์ชฝ ์‹œํ”„ํŠธ (<<): ์˜ฌ๋ฆผ(carry) ๊ณ„์‚ฐ
10+
์˜ฌ๋ฆผ์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
11+
12+
**๋น„ํŠธ ์—ฐ์‚ฐ ๋ง์…ˆ ์›๋ฆฌ
13+
1๋‹จ๊ณ„: XOR (^) - "์˜ฌ๋ฆผ ์—†๋Š” ๋ง์…ˆ"
14+
์˜ˆ์‹œ: 5 + 3์„ ์ด์ง„์ˆ˜๋กœ
15+
16+
101 (5)
17+
+ 011 (3)
18+
------
19+
20+
2^0์˜ ์ž๋ฆฌ 1 + 1 = 0 (์˜ฌ๋ฆผ ๋ฌด์‹œ)
21+
2^1์˜ ์ž๋ฆฌ 0 + 1 = 1
22+
2^1์˜ ์ž๋ฆฌ 1 + 1 = 0 (์˜ฌ๋ฆผ ๋ฌด์‹œ)
23+
24+
101
25+
^ 011
26+
-----
27+
110 (6) โ† ์ด๊ฒƒ์ด XOR ๊ฒฐ๊ณผ
28+
29+
2๋‹จ๊ณ„: AND (&) + ์‹œํ”„ํŠธ (<<) - "์˜ฌ๋ฆผ ๊ณ„์‚ฐ"
30+
์–ด๋””์„œ ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?
31+
โ†’ ๋‘˜ ๋‹ค 1์ธ ์ž๋ฆฌ์—์„œ๋งŒ ์˜ฌ๋ฆผ ๋ฐœ์ƒ
32+
33+
101
34+
& 011
35+
-----
36+
001 โ† ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ž๋ฆฌ
37+
38+
์˜ฌ๋ฆผ์„ ๋‹ค์Œ ์ž๋ฆฌ๋กœ ์ด๋™: << 1 (์™ผ์ชฝ์œผ๋กœ 1์นธ ์‹œํ”„ํŠธ)
39+
40+
3๋‹จ๊ณ„: ๋‹ค์‹œ 1๋‹จ๊ณ„์™€ 2๋‹จ๊ณ„ ๋ฐ˜๋ณต
41+
์ด์ œ 6 + 2๋ฅผ ๊ณ„์‚ฐ:
42+
43+
1๋‹จ๊ณ„: 110 ^ 010 = 100 (4)
44+
2๋‹จ๊ณ„: (110 & 010) << 1 = 010 << 1 = 100 (4)
45+
46+
๋‹ค์‹œ 4 + 4๋ฅผ ๊ณ„์‚ฐ:
47+
1๋‹จ๊ณ„: 100 ^ 100 = 000 (0)
48+
2๋‹จ๊ณ„: (100 & 100) << 1 = 100 << 1 = 1000 (8)
49+
50+
๋‹ค์‹œ 0 + 8์„ ๊ณ„์‚ฐ:
51+
1๋‹จ๊ณ„: 000 ^ 1000 = 1000 (8)
52+
2๋‹จ๊ณ„: (000 & 1000) << 1 = 000 << 1 = 0
53+
54+
-> ์˜ฌ๋ฆผ์ด 0์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒ. ๊ฒฐ๊ณผ๋Š” 8 (1000)
55+
56+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
57+
32๋น„ํŠธ ์ •์ˆ˜์—์„œ ์ตœ๋Œ€ 32๋ฒˆ์˜ ๋ฐ˜๋ณต๋งŒ ํ•„์š”
58+
์˜ฌ๋ฆผ์ด ์ „ํŒŒ๋˜๋Š” ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๊ฐ€ 32๋น„ํŠธ๋กœ ์ œํ•œ๋จ
59+
60+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
61+
๋ช‡ ๊ฐœ์˜ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ƒ์ˆ˜ ๊ณต๊ฐ„
62+
์ถ”๊ฐ€ ๋ฐฐ์—ด์ด๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
63+
'''
64+
class Solution:
65+
def getSum(self, a: int, b: int) -> int:
66+
# 32๋น„ํŠธ ์ •์ˆ˜ ๋ฒ”์œ„๋ฅผ ์œ„ํ•œ ๋งˆ์Šคํฌ ์ƒ์„ฑ
67+
# why? Python์˜ ๋ฌดํ•œ ์ •๋ฐ€๋„ ์ •์ˆ˜๋ฅผ 32๋น„ํŠธ๋กœ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
68+
mask = 0xFFFFFFFF
69+
70+
# ์˜ฌ๋ฆผ์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
71+
# b๊ฐ€ ์˜ฌ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ, ์˜ฌ๋ฆผ์ด ์—†์œผ๋ฉด ๋ง์…ˆ ์™„๋ฃŒ
72+
while b != 0:
73+
# XOR ์—ฐ์‚ฐ์œผ๋กœ ์˜ฌ๋ฆผ ์—†๋Š” ๋ง์…ˆ ์ˆ˜ํ–‰
74+
sum_without_carry = a ^ b
75+
76+
# AND ์—ฐ์‚ฐ์œผ๋กœ ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ž๋ฆฌ ์ฐพ๊ธฐ
77+
# ์™ผ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์‹œํ”„ํŠธํ•˜์—ฌ ์˜ฌ๋ฆผ์„ ๋‹ค์Œ ์ž๋ฆฌ๋กœ ์ด๋™
78+
carry = (a & b) << 1
79+
80+
# 32๋น„ํŠธ ๋ฒ”์œ„๋กœ ์ œํ•œํ•˜๋ฉด์„œ ๋‹ค์Œ ๋ฐ˜๋ณต์„ ์œ„ํ•ด ๊ฐ’ ์—…๋ฐ์ดํŠธ
81+
a = sum_without_carry & mask
82+
b = carry & mask
83+
84+
# ์Œ์ˆ˜ ์ฒ˜๋ฆฌ: 32๋น„ํŠธ์—์„œ ์ตœ๋Œ€ ์–‘์ˆ˜(0x7FFFFFFF)๋ณด๋‹ค ํฌ๋ฉด ์Œ์ˆ˜๋กœ ๋ณ€ํ™˜
85+
if a > 0x7FFFFFFF:
86+
return ~(a ^ mask)
87+
else:
88+
return a
89+
90+
91+

0 commit comments

Comments
ย (0)