๋ฌธ์
์์ ์ ์ n์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ด์ง์๋ก ๋ํ๋์ ๋ 1์ ์์น๋ฅผ ๋ชจ๋ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ตํ์ ๋นํธ(least significant bit, lsb)์ ์์น๋ 0์ด๋ค.
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , n์ด ์ฃผ์ด์ง๋ค. (1 ≤ T ≤ 10, 1 ≤ n ≤ 10^6)
ํ์ด
1. 2์ง์์ ๊ฒฝ์ฐ, 2๋ก ๋๋ ๋๋จธ์ง๊ฐ ์กด์ฌํ๋ค๋ฉด(๋๋จธ์ง๋ 1) ํด๋น ์์น 1์ ๊ฐ์ด ์จ๋ค.
2. ํ ์คํธ ์ผ์ด์ค ๋น n์ ๊ฐ์ 2๋ก ๊ณ์ ๋๋๋ค๋ฉด ์ต๋ log(n)๋ฒ ์ํํด์ผํ๋ค. O(TlogN)
3. T๋ ์ต๋ 10 n์ ์ต๋๊ฐ์ 10^6์ผ๋ก ์ด๋ฏ๋ก ์ต๋ log(10^7)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฏ๋ก 2๋ก ๊ณ์ ๋๋๋ ๋ฐฉ๋ฒ์ ์ฑํํ๋ค.
์์ค ์ฝ๋
import java.util.*
fun main() = with(Scanner(System.`in`)) {
val T = nextInt() // ํ
์คํธ์ผ์ด์ค ์
// ๋ฐ๋ณต
for(i in 1..T){
val N = nextInt() // ํ
์คํธ์ผ์ด์ค
module(N) // ๋ชจ๋ ํธ์ถ
}
}
// ์ด์ง์๋ฅผ ๊ณ์ฐํ๊ณ ์ถ๋ ฅํ๋ ๋ชจ๋
fun module(N:Int) {
val sb = StringBuilder() // ์ถ๋ ฅ์ฉ StringBuilder
var n = N // ๋๋๊ฐ(๋ชซ)
var c = 0 // ํ์ฌ ์๋ฆฌ ์ธ๋ฑ์ค(1์ ์๋ฆฌ๊ฐ 0)
while(n > 0){
// 2์ ๋๋จธ์ง๊ฐ 1์ด๋ผ๋ฉด, ํด๋น ์๋ฆฌ๋ฅผ 1์ด ๋๋ฏ๋ก ์์น๋ฅผ ์ ์ฅ
if(n % 2 == 1){
sb.append(c)
sb.append(" ")
}
// ๋ค์์กฐ๊ฑด ์ค์
n /= 2 // 2๋ก ๋๋ ๋ชซ
c++ // ๋ค์ ์๋ฆฌ(์ธ๋ฑ์ค)์ฆ๊ฐ
}
println(sb)
}
'Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ๋ฐฑ์ค 2309 - ์ผ๊ณฑ ๋์์ด (1) | 2024.10.20 |
---|---|
[Kotlin] ๋ฐฑ์ค 10870 - ํผ๋ณด๋์น ์ 5 (0) | 2024.10.20 |
[Kotlin] ๋ฐฑ์ค 2501 - ์ฝ์ ๊ตฌํ๊ธฐ (0) | 2024.10.19 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌด์ธ๋ ์ฌํ ํ์ด์ฌ ํ์ด (0) | 2023.01.28 |
[Algorithm] Union - Find (Python ๊ตฌํ) (0) | 2022.05.10 |