πŸ’‘Algorithm/λ¬Έμ œν’€κΈ°

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λ‹€μŒ 큰 숫자

μ§€μŒμŒ 2021. 11. 4. 18:15

문제

μ£Όμ–΄μ§„ 쑰건에 λ§žλŠ” n의 λ‹€μŒ 큰 숫자λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

- 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

- μ‘°κ±΄ 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°―μˆ˜κ°€ κ°™μŠ΅λ‹ˆλ‹€.

- μ‘°κ±΄ 3. n의 λ‹€μŒ 큰 μˆ«μžλŠ” 쑰건 1, 2λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 쀑 κ°€μž₯ μž‘μ€ 수 μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예

n result
78 83
15 23

 

풀이

n보닀 크고, 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„λ•Œ nκ³Ό 1의 κ°―μˆ˜κ°€ κ°™λ‹€ -> nκ³Ό n보닀 큰수λ₯Ό 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.

쑰건 2κ°€μ§€λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 수

 

2μ§„μˆ˜λ‘œ λ³€ν™˜ -> toString() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. 

n의 1의 개수λ₯Ό 찾아놓고,

while문으둜 n을 ν•˜λ‚˜μ”© μ¦κ°€μ‹œν‚€λ©΄μ„œ λ‹€μŒ 큰 수의 2μ§„μˆ˜μ˜ 1의 개수λ₯Ό μ°ΎλŠ”λ‹€.

λΉ„κ΅ν•΄μ„œ κ°™μœΌλ©΄ λ©ˆμΆ”κ³ , n을 λ¦¬ν„΄ν•œλ‹€.

 

 

μ½”λ“œ

const solution = (n) => {
  let binary = n.toString(2);
  let count = 0;

  // count : n의 μ΄μ§„μˆ˜μ—μ„œ 1의 개수
  for (let x of binary) {
    if (x === '1') count++;
  }

  while (true) {
    n += 1;
    let bigNumBinary = n.toString(2);
    let bigNumCount = 0;

    // λ‹€μŒ 큰 숫자의 count
    for (let x of bigNumBinary) {
      if (x === '1') bigNumCount++;
    }

    if (count === bigNumCount) break;
  }
  return n;
}