[백준] 17배 (5893)(kotlin)

문제 설명

백준 5893번 문제 링크

입력 및 출력

» 입력

첫째 줄에 이진수 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))
}