๋ฌธ์
Given two binary strings a and b, return their sum as a binary string.
2์ง์ ๋ฌธ์์ด a,b๊ฐ ์ฃผ์ด์ง๋ฉด ์ด๋ค์ ๋ํ ๊ฐ์ ๋ค์ 2์ง์ ๋ฌธ์์ด๋ก ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
ํ์ด
let addBinary = function (a, b) {
let sum = Bigint('0b' a) + BigInt('0b', 2);
let result = sum.toString(2);
return result;
};
์ฒ์์ ์๊ฐํ ๊ฒ์ ๋ฌธ์์ด์ธ a์ b๋ฅผ ์ ์ํ ํ์ฌ ๋ํ๋ ๊ฒ์ด์๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด parseInt ๋ฉ์๋๋ฅผ ์ด์ฉํ์๋ค.
let sum = parseInt(a, 2) + parseInt(b, 2);
๋ณดํต parseInt์ ๋งค๊ฐ๋ณ์๋ก ๋ฌธ์์ด๋ง ๋ฃ์ผ๋ฉด ๋ฌธ์์ด์ ๋ฐ๋ก ์ ์๋ก ๋ฐ๊ฟ์ฃผ์ง๋ง
๋งค๊ฐ๋ณ์๋ก ์ ์๋ฅผ ํ๋ ๋ ์ถ๊ฐํ๋ฉด ํด๋น์ง์๋ก ๋ฌธ์์ด์ ๋ฐํํ๋ค.
๋ฌธ์์ด๋ก ์นํํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉํ๋ toString ๋ฉ์๋๋ ๋งค๊ฐ๋ณ์๋ก ์ ์๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ์ง์์ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค.
์ฌ๋งํด์ ์ด๋ ๊ฒ ํด๊ฒฐ๋๊ฒ ์ง๋ง ์๊ณ ๋ฆฌ์ฆ์ ํญ์ ๊ทน๋จ์ ์ธ ๋ฐ์ดํฐ๋ก ํ
์คํธํด๋ณด๊ธฐ ๋ง๋ จ์ด๊ณ (...)
์ ์๋ฒ์๋ฅผ ๋์ด์๋ ๋ณ์๋ค์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์์ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋์๋ค.
๊ทธ๋ผ ์ง๋ ๋ฌธ์ ์ ๊ฐ์ด BigInt๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๊น ??? ์๊ฐํ๋ค๊ฐ ์ซ์ ํ์ ์ ๋ํด ์๊ฐํ๊ฒ ๋์๋ค.
์์ฃผ ์ฐ์ด์ง ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ๋์ฌ๋ฅผ ์ด์ฉํด 2์ง์, 8์ง์, 16์ง์๋ฅผ ํํํ ์ ์๋ค.
0b111๊ฐ์ ๊ฒฝ์ฐ๋ 2์ง์ 111์ ์๋ฏธํ๋ค.
๊ทธ๋ผ a์ b์๋ 0b๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด 2์ง์๊ฐ ๋ ๊ฑฐ๊ณ , ์ด๊ฒ์ BigInt๋ก ๋ณํํด๋ ๋๊ฒ ๋ค ์ถ์๊ณ ๊ทธ๋ ๊ฒ ํด๊ฒฐ.. ๐ฎ
๋ค๋ฅธ ํ์ด
LeetCode์ ํ ๋ก ๊ฒ์ํ์์ ๋์ ํ์ด๋ฅผ ํ์ค๋ก ์์ฑํ ์ฝ๋๋ ๋ณด์๊ณ ,
์๋์ ๊ฐ์ด for๋ฌธ์ ์ด์ฉํ ์ฝ๋๋ ์์๋ค.
let addBinary = (a, b) => {
// Truth Table
// 1st + 2nd + carry = sum, new carry, decimal sum
// 0 + 0 + 0 = 0, 0 (0)
// 0 + 0 + 1 = 1, 0 (1)
// 0 + 1 + 1 = 0, 1 (2)
// 1 + 1 + 1 = 1, 1 (3)
let carry = 0;
let result = '';
let len1 = a.length - 1;
let len2 = b.length - 1;
for (; len1 >= 0 || len2 >= 0 || carry > 0; len1--, len2--) {
let sum = (+a[len1] || 0) + (+b[len2] || 0) + carry;
if (sum > 1) {
sum = sum % 2;
carry = 1;
} else {
carry = 0;
}
result = `${sum}${result}`;
}
return result;
};
๋ท๊ธ์์์๋ถํฐ ์ธ๋ฑ์ค๋ฅผ ํ๋์ฉ ์ค์ฌ๋๊ฐ๋ฉฐ ๋ํ ๊ฐ์ 2๋ก ๋๋์ด 2์ง์๋ก ๋ฐ๊พธ๋ ๊ฒ ๊ฐ์๋ค.
์ถ๊ฐ๋ก +a[len1]์ ์๋ฏธ๋ฅผ ํ์
ํ๊ธฐ ์ํด ๊ฒ์ํด๋ณด๋
๋ง์
์ฐ์ฐ์ +๋ ์์ ์ฐ์ผ ๋ ๋จํญ ์ฐ์ฐ์๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ซ์ํ์ผ๋ก ๋ณํ์ด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ค๊ฐ์ ์ฝ์๋ก + ์ฐ์ฐ์์ ์ ๋ฌด ์ฐจ์ด๋ฅผ ํ์ธํด๋ดค์ ๋, for๋ฌธ์ ๋๋ฉด์ ์ฐ์ฐ์๊ฐ ๋ถ์ด์๋ค๋ฉด undefined๊ฐ ์๋ NaN์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์๋ฌธ์ ์๋์์ ํ์ธํด๋ณผ ์ ์๋ค.
https://leetcode.com/problems/add-binary/discuss/577148/simple-javascript-solution
๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ
๋ฐฉ๋ฌธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐
ํฌ์คํ ๋ค์ ๊ณต๋ถ์ค์ธ ๋ด์ฉ์ ๊ธ๋ก ์์ฑํ ๊ฒ์ด๋ผ ๋ถ์กฑํ ์ ์ด ๋ง์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
๋ถ์กฑํ ๋ถ๋ถ์ ๋ํ ์ฝ๋ฉํธ๋ ์ธ์ ๋ ํ์์ ๋๋ค.
์ข์ ํ๋ฃจ ๋์ธ์, ๊ฐ์ฌํฉ๋๋ค! ๐
'๐ Algorithm > LeetCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] leetCode : Linked List Cycle II (3) | 2022.05.03 |
---|---|
[JavaScript] leetCode : Valid Mountain Array (3) | 2022.05.02 |
[JavaScript] LeetCode : Plus One (0) | 2022.04.21 |
[JavaScript] LeetCode : Largest Number At Least Twice of Others (1) | 2022.04.20 |
[JavaScript] LeetCode : Find Pivot Index (1) | 2022.04.20 |
Comment