Skip to content

Binary Gap ๋ฌธ์ œ ํ•ด๊ฒฐ โ€‹

๋ฌธ์ œ ์„ค๋ช… โ€‹

์–‘์˜ ์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆซ์ž๋ฅผ ์ด์ง„์ˆ˜(Binary) ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, ๊ฐ€์žฅ ๊ธด 0์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์—ฐ์†์ ์ธ ๋ถ€๋ถ„(์ด์ง„ ๊ฐ„๊ฒฉ, Binary Gap) ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด์ง„ ๊ฐ„๊ฒฉ(Binary Gap)์ด๋ž€:

  • 1๋กœ ์‹œ์ž‘ํ•˜๊ณ  1๋กœ ๋๋‚˜๋Š” 0๋“ค์˜ ์—ฐ์†์ ์ธ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์—ฐ์†๋œ 0์ด ์žˆ์–ด๋„ 1๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ด๋Š” ์œ ํšจํ•œ Binary Gap์ด ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ์‹œ โ€‹

N (์‹ญ์ง„์ˆ˜)์ด์ง„์ˆ˜ ํ‘œํ˜„Binary Gap ๊ธธ์ด
910012
52910000100014
20101001
1511110

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• โ€‹

  1. ์ž…๋ ฅ๋œ ์ˆซ์ž N์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉฐ, ๊ฐ€์žฅ ๊ธด Binary Gap์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ํ˜„์žฌ ์ˆซ์ž๊ฐ€ 1์ผ ๊ฒฝ์šฐ, ๊ทธ ์ดํ›„์— ๋‚˜์˜ค๋Š” 1๊นŒ์ง€์˜ 0 ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  4. ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ, ๋” ๊ธด Binary Gap์ด ๋‚˜์˜ค๋ฉด ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๊ตฌํ˜„ โ€‹

typescript
function solution(N: number): number {
  // 1. N์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
  const binary = N.toString(2)
  console.log('๐Ÿ”น 253eosam > solution > binary:', binary)

  let answer = 0 // ๊ฐ€์žฅ ๊ธด Binary Gap ์ €์žฅ

  // 2. ์ด์ง„์ˆ˜๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ Binary Gap ์ฐพ๊ธฐ
  for (let i = 0; i < binary.length; i++) {
    if (binary[i] === '0') continue // 0์ด๋ฉด ํŒจ์Šค

    for (let j = i + 1; j < binary.length; j++) {
      console.log(i, j)
      if (binary[j] === '1') {
        // 1์„ ๋งŒ๋‚˜๋ฉด ๊ธธ์ด ๊ณ„์‚ฐ
        answer = Math.max(answer, j - i - 1)
        i = j - 1 // ๋‹ค์Œ ํƒ์ƒ‰ ์œ„์น˜ ์—…๋ฐ์ดํŠธ
        break
      }
    }
  }

  return answer
}

์ฝ”๋“œ ์„ค๋ช… โ€‹

  1. ์ด์ง„์ˆ˜ ๋ณ€ํ™˜

    typescript
    const binary = N.toString(2)
    • toString(2)๋ฅผ ์‚ฌ์šฉํ•ด ์ˆซ์ž๋ฅผ ์ด์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. Binary Gap ํƒ์ƒ‰

    • 1์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • j๋ฅผ i+1๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉด์„œ 1์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • 1์„ ์ฐพ์œผ๋ฉด (j - i - 1)์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ตœ๋Œ€ Binary Gap ์—…๋ฐ์ดํŠธ

    typescript
    answer = Math.max(answer, j - i - 1)
    • ํ˜„์žฌ ์ฐพ์€ Binary Gap์˜ ๊ธธ์ด๋ฅผ answer์™€ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„ โ€‹

  • ์ด์ง„ ๋ณ€ํ™˜: O(log N) โ†’ ์ˆซ์ž N์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  • ์ด์ง„์ˆ˜ ํƒ์ƒ‰: O(log N) โ†’ ์ˆซ์ž N์˜ ๋น„ํŠธ ์ˆ˜๋งŒํผ ์ˆœํšŒ
  • ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„: O(log N)

์‹คํ–‰ ์˜ˆ์ œ โ€‹

typescript
console.log(solution(9)) // ์ถœ๋ ฅ: 2
console.log(solution(529)) // ์ถœ๋ ฅ: 4
console.log(solution(20)) // ์ถœ๋ ฅ: 1
console.log(solution(15)) // ์ถœ๋ ฅ: 0

์ตœ์ข… ์ •๋ฆฌ โ€‹

โœ… ์ด์ง„ ๋ณ€ํ™˜ ํ›„ ํƒ์ƒ‰: toString(2)๋กœ ๋ณ€ํ™˜ ํ›„ ์ˆœํšŒ
โœ… 1์„ ๊ธฐ์ค€์œผ๋กœ Binary Gap ํƒ์ƒ‰: j ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ํƒ์ƒ‰ ๋ฐฉ์‹
โœ… ์ตœ๋Œ€๊ฐ’ ์—…๋ฐ์ดํŠธ: Math.max() ์‚ฌ์šฉ
โœ… ์‹œ๊ฐ„ ๋ณต์žก๋„ O(log N): N์˜ ๋น„ํŠธ ๊ธธ์ด์— ๋น„๋ก€

์ด์ œ ํšจ์œจ์ ์œผ๋กœ Binary Gap์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€