|
| 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