[백준] 17배 (5893)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 이진수 N이 주어진다. N은 최대 1000자리인 이진수이며, 0이 들어오는 경우는 없다.
» 출력
입력으로 주어진 N을 17배한 다음, 이진수로 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
10110111 | 110000100111 |
문제 풀이1
import java.io.BufferedReader
import java.io.InputStreamReader
import java.math.BigInteger
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
println(readLine()
.toBinaryMultiflies("10001")
.toString()
.toBinaryOperation()
)
}
fun String.toBinaryMultiflies(mul: String, idx: Int = 0): BigInteger {
return this.toBigInteger() + if (mul[idx] != '1') {
this.toBinaryMultiflies(mul, idx + 1)
} else {
this.let {
var app = ""
for (i in 0 until mul.length - 1) {
app += "0"
}
it + app
}.toBigInteger()
}
}
fun String.toBinaryOperation(): BigInteger {
var reversedString = ""
reversedString += this.reversed()
for (i in 0 until 5) reversedString += "0"
var result = ""
var up = 0
for (i in reversedString.indices) {
val now = reversedString[i] - '0'
if (now + up in 0..1) {
result += reversedString[i] + up
up = 0
}
else {
if (up > 0) {
result += (now + up) % 2
up = (now + up) / 2
} else {
up = now / 2
result += now % 2
}
}
}
return result.reversed().toBigInteger()
}
문제 풀이2
import java.io.BufferedReader
import java.io.InputStreamReader
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
println((readLine().toBigInteger(2) * 17.toBigInteger()).toString(2))
}