(Leetcode) [Binary]: Sum of two integers
Topic: Binary
Difficulty: Medium
๋ง์ ๊ณผ ๋บ์ ์ฐ์ฐ์ (+, -) ์ฌ์ฉ ์์ด ๋ ์ ์์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ .
์ผ๋จ ๋จ์ ์ ๋ชฉ์ด binary์ฌ์ binary๋ฅผ ์ด์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ๋ฐ๋ก ์์์ฐจ๋ ธ๋ค.
My first idea
- ์ญ์ง๋ฒ ์๋ฅผ ์ด์ง๋ฒ์ผ๋ก ๋ณ๊ฒฝ.
- ์ด์ง๋ฒ ๋ง์ ํ๊ธฐ.
- ์ด์ง๋ฒ์ผ๋ก ์ฐ์ฌ์๋ ๋ต์ ์ญ์ง๋ฒ์ผ๋ก ๋ค์ ๋ณ๊ฒฝ.
๋ฌธ์ ์
๋ง์ฝ ๋ต์ด ์์์ด๋ฉด ์์๋ฅผ ์ ๋๊ฐ ์์ด ์์๋ก ๋ณ๊ฒฝํ๋ ๊ณผ์ ์ด ๊ต์ฅํ ๋ณต์กํด์ง๋ค.
์ด๊ฒ ๋ญ ์๋ฆฌ๋? 2์ง๋ฒ์์ MSB(most significant bit)๋ ๋ถํธ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ด๋ค (2โs complement).
1 for negative number, and 0 for positive number.
์์๋ฅผ ์์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ฐ digit์ ๋ฐ๋๋๋ ์ซ์๋ก ๋ฐ๊พธ๊ณ (0์ด๋ฉด 1๋ก, 1์ด๋ฉด 0์ผ๋ก) LSB (least significant bit)์ 1์ ๋ํ๋ค.
์ฃผ์ ๋ฆฌ ์ฃผ์ ๋ฆฌ ์ผ์ง๋ง ๊ฒฐ๋ก ์ ์ด ๊ณผ์ ์ผ๋ก ์ฝ๋๊ฐ ๊ต์ฅํ ๊ธธ์ด์ง๊ฑฐ๊ณ ๋นํจ์จ์ ์ด๋ ๊ฒ์ด๋ค.
Solution
class Solution {
public:
int getSum(int a, int b) {
while (b != 0) {
unsigned carry = a&b; // carry should be unsigned to deal with negative numbers
a = a^b;
b = carry << 1;
}
return a;
}
};
์ด๋ฒ์ geeksforgeeks์์ ๋์์ ๋ฐ์๋ค.
๋ค์ฏ์ค์ด๋ฉด ๋ ๊ฒ์ 70์ค์ ์ฐ๊ณ ์์์์๋ค.
- AND operator๋ฅผ ์ด์ฉํด์ carryin์ ์ฐพ๋๋ค.
- XOR operator๋ฅผ ์ด์ฉํด์ ๊ฐ digit์์ 0+1=1์ด๋ 1+0=1 ๊ณ์ฐ์ ํด์ค๋ค. 0+0์ 0์ผํ ๊ณ , 1+1์ carryin์ผ๋ก ๋์ด๊ฐํ ๋ 0์ด ๋ ๊ฒ์ด๋ค.
ํ๋ค๊ฐ b (carryin)์ด 0์ด ๋๋ฉด ๋๋ธ๋ค.
e.g.
a=0010, b=0011
carry=0010
a=0001
b=0100
carry=0000
a=0101
b=0000
return a=0101
Leave a comment