Binary Gap ๋ฌธ์ ํด๊ฒฐ โ
๋ฌธ์ ์ค๋ช โ
์์ ์ ์ N
์ด ์ฃผ์ด์ก์ ๋, ์ด ์ซ์๋ฅผ ์ด์ง์(Binary) ๋ก ๋ณํํ ํ, ๊ฐ์ฅ ๊ธด 0์ผ๋ก ์ด๋ฃจ์ด์ง ์ฐ์์ ์ธ ๋ถ๋ถ(์ด์ง ๊ฐ๊ฒฉ, Binary Gap) ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ด์ง ๊ฐ๊ฒฉ(Binary Gap)์ด๋:
- 1๋ก ์์ํ๊ณ 1๋ก ๋๋๋ 0๋ค์ ์ฐ์์ ์ธ ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค.
- ๋ง์ฝ ์ฐ์๋
0
์ด ์์ด๋ 1๋ก ๋๋ฌ์ธ์ฌ ์์ง ์๋ค๋ฉด ์ด๋ ์ ํจํ Binary Gap์ด ์๋๋๋ค.
์์ โ
N (์ญ์ง์) | ์ด์ง์ ํํ | Binary Gap ๊ธธ์ด |
---|---|---|
9 | 1001 | 2 |
529 | 1000010001 | 4 |
20 | 10100 | 1 |
15 | 1111 | 0 |
ํด๊ฒฐ ๋ฐฉ๋ฒ โ
- ์
๋ ฅ๋ ์ซ์
N
์ ์ด์ง์๋ก ๋ณํํฉ๋๋ค. - ์ด์ง์ ๋ฌธ์์ด์ ํ์ํ๋ฉฐ, ๊ฐ์ฅ ๊ธด Binary Gap์ ์ฐพ์ต๋๋ค.
- ํ์ฌ ์ซ์๊ฐ
1
์ผ ๊ฒฝ์ฐ, ๊ทธ ์ดํ์ ๋์ค๋1
๊น์ง์0
๊ฐ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. - ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ฉด์, ๋ ๊ธด 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
}
์ฝ๋ ์ค๋ช โ
์ด์ง์ ๋ณํ
typescriptconst binary = N.toString(2)
toString(2)
๋ฅผ ์ฌ์ฉํด ์ซ์๋ฅผ ์ด์ง์ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
Binary Gap ํ์
1
์ ๊ธฐ์ค์ผ๋ก ํ์์ ์์ํฉ๋๋ค.j
๋ฅผi+1
๋ถํฐ ํ์ํ๋ฉด์1
์ ์ฐพ์ ๋๊น์ง ์ด๋ํฉ๋๋ค.1
์ ์ฐพ์ผ๋ฉด(j - i - 1)
์ ๊ณ์ฐํ์ฌ ์ต๋๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
์ต๋ Binary Gap ์ ๋ฐ์ดํธ
typescriptanswer = Math.max(answer, j - i - 1)
- ํ์ฌ ์ฐพ์ Binary Gap์ ๊ธธ์ด๋ฅผ
answer
์ ๋น๊ตํ์ฌ ์ต๋๊ฐ์ ์ ์ฅํฉ๋๋ค.
- ํ์ฌ ์ฐพ์ Binary Gap์ ๊ธธ์ด๋ฅผ
์๊ฐ ๋ณต์ก๋ โ
- ์ด์ง ๋ณํ:
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
์ ๊ตฌํ ์ ์์ต๋๋ค! ๐