[JavaScript] LeetCode : Add Binary
728x90

๋ฌธ์ œ

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์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฌธ์ž์—ด๋งŒ ๋„ฃ์œผ๋ฉด ๋ฌธ์ž์—ด์„ ๋ฐ”๋กœ ์ •์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ์ง€๋งŒ
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ •์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น์ง„์ˆ˜๋กœ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

parseInt๋กœ 2์ง„์ˆ˜ ๋ณ€ํ™˜

๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” 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

 

simple javascript solution - LeetCode Discuss

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

 

 

 

 


๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ

๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™Œ

ํฌ์ŠคํŒ…๋“ค์€ ๊ณต๋ถ€์ค‘์ธ ๋‚ด์šฉ์„ ๊ธ€๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋ผ ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

๋ถ€์กฑํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฝ”๋ฉ˜ํŠธ๋Š” ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™‚

728x90

'๐Ÿ““ 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