avatar
Published on

Codility - Binary Gap

Author
  • avatar
    Name
    yceffort

1-1 Binary Gap

문제

숫자 N을 μ΄μ§„μˆ˜λ‘œ λ°”κΏ¨μ„λ•Œ, 1κ³Ό 1사이에 μžˆλŠ” 0의 κ°œμˆ˜κ°€ κ°€μž₯ 많이 연속해 μžˆλŠ” 0의 개수λ₯Ό κ΅¬ν•˜λΌ.

9λŠ” μ΄μ§„μˆ˜λ‘œ λ°”κΏ€ 경우 1001, 이경우 0의 μ΅œλŒ€ κ°œμˆ˜λŠ” 2.
529λŠ” μ΄μ§„μˆ˜λ‘œ λ°”κΏ€ 경우 1000010001, 이경우 0의 μ΅œλŒ€ κ°œμˆ˜λŠ” 3.
20은 μ΄μ§„μˆ˜λ‘œ λ°”κΏ€ 경우 10100, 이 경우 0의 μ΅œλŒ€ κ°œμˆ˜λŠ” 1. (100은 1둜 λ‘˜λŸ¬ μŒ“μ—¬ μžˆμ§€ μ•ŠμŒ)
15λŠ” μ΄μ§„μˆ˜λ‘œ λ°”κΏ€κ²½μš° 1111 μ΄λ―€λ‘œ, 0의 κ°œμˆ˜λŠ” 0개

풀이

function solution(N) {
  // 2μ§„λ²•μœΌλ‘œ λ³€ν™˜
  const binary = N.toString(2)
  // 1둜 μͺΌκ° λ‹€.
  const splitted = binary.split(1)

  // λ‘κ°œ μ΄ν•˜λ‘œ μͺΌκ°œμ§ˆ 경우, 1이 ν•œκ°œ 밖에 μ—†μœΌλ―€λ‘œ 값은 0
  if (splitted.length <= 2) {
    return 0
  } else {
    // λ§ˆμ§€λ§‰ λ‚˜λˆ„κΈ°λŠ” μ˜λ―Έκ°€ μ—†λ‹€.
    // '' μ΄κ±°λ‚˜ 1둜 λ§‰ν˜€μžˆμ§€ μ•Šλ‹€λ©΄ μˆ«μžκ°€ λ‚˜μ˜¬ κ²ƒμ΄λ―€λ‘œ
    splitted.pop()
    // 제일
    return splitted.reduce((p, c) => (c.length > p ? c.length : p), 0)
  }
}

ν•΄μ„€

λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό popν•˜λŠ” κ²ƒλ§Œ κΈ°μ–΅ν•˜λ©΄ 될 λ“―.

https://app.codility.com/demo/results/training3C4SN2-EXK/