import java.util.*
fun main(args:Array<String>) = with(Scanner(System.`in`)){
var a = nextLine()
var sum = 0
if (a.length % 3 == 1) a = "00$a"
if (a.length % 3 == 2) a = "0$a"
// 3개씩으로 안나눠 떨어질 경우 앞에 0을 채워줌
for(i in a.indices step 3){
sum = a[i].toString().toInt() * 4 + a[i+1].toString().toInt() * 2 + a[i+2].toString().toInt()
// 3자리씩 끊어서 8진수로 변환
print(sum)
} // indices == 0 until a.length
}
코틀린으로 진수변환을 해본적이 없어 헤맨 문제이다.
import java.util.*
fun main(args:Array<String>) = with(Scanner(System.`in`)){
var a = nextLine()
var b = a.toInt(2) // 2진수를 10진수로
println(b.toString(8)) // 10진수를 8진수로
}
처음에는 단순히 입력받은 2진수를 10진수로, 10진수를 8진수로 변경하려고 시도했는데
NumberFormat 오류가 발생하였다.
원인을 생각해보니 주어지는 수의 길이가 최대 1,000,000 이라서 toInt를 하는 과정에서 범위를 초과한 거 같았다.
그래서 방향을 바꿔서
2진수를 세자리씩 끊어서 그걸 10진수로 변환한 수가 8진수이기 때문에
import java.util.*
fun main(args:Array<String>) = with(Scanner(System.`in`)){
var a = nextLine()
var sum = 0
if (a.length % 3 == 1) a = "00$a"
if (a.length % 3 == 2) a = "0$a"
for(i in a.indices step 3){
sum = a[i].toInt() * 4 + a[i+1].toInt() * 2 + a[i+2].toInt()
print(sum)
} // indices == 0 until a.length
}
이렇게 코드를 짰으나, 코틀린에서는 char형을 숫자로 사용할 수 없고, Int로 변환한 값이 아스키 코드이기 때문에 원하는 값이 나오지 않았다.