https://www.acmicpc.net/problem/11005
풀이
더보기
(개같이 멸망함)
최대값이 얼마까지 가는지 모르므로 일단 while문을 돌린다.
count로 자릿수를 설정해놓고 만약 진수의 제곱을 나누었을때 해당 진수의 n제곱보다 크게 나오면 이건 좀 더 나눠야 한단 뜻이므로 카운팅을 올린다.
만약 해당진수의 n제곱보다 작게 나오면 해당 몫을 가장 큰 수로 저장하고, 나눈 몫을 나머지로 나머지 아랫수를 구한다.
왜 그렇게 되냐고? 10진수를 살펴보면,
362라는 숫자가 있다 치자. 3이 가장 큰 수이므로 362 / (10^2) 하면 몫이 3이 나오므로 10진수의 3의 자리는 3, 362 % (10^2) 하면 나머지가 62이므로, 이것으로 아랫차수를 계산한다.
이제 자릿수 카운트를 구했으므로, 0이 아니라면(1의 자리수에서 끝난게 아니라면) for문을 통해 i를 최고점에서 -1씩 줄여가면서 마찬가지로 몫을 나눠 저장하고, 나머지는 계산값에 저장해서 0이 될때까지 반복한다.
import kotlin.math.pow
fun main(args: Array<String>) {
question11005()
}
fun question11005() {
var caseCode = arrayOf(
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z" )
var item = readLine()!!.split(" ").map { it.toInt() }
var number10 = item[0].toDouble()
var square = item[1].toDouble()
var returnNumber = ""
var count = 0
while (true) {
var calc = number10 / square.pow(count)
if (calc < square) {
returnNumber += caseCode[calc.toInt()]
number10 %= square.pow(count)
break
} else {
count += 1
}
}
//이미 가장 큰 자리를 더했으므로 count -1 하고 downTo로 내려가봄.
if(count != 0) {
for (i in (count - 1) downTo 0) {
returnNumber += caseCode[(number10 / square.pow(i)).toInt()]
number10 %= square.pow(i)
}
}
println(returnNumber)
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 2903번 문제풀이 (0) | 2023.06.16 |
---|---|
Kotlin] 백준 2720번 문제풀이 (0) | 2023.06.15 |
Kotlin] 백준 2745번 문제풀이 (0) | 2023.06.14 |
Kotlin] 백준 10798번 문제풀이 (0) | 2023.06.14 |
Kotlin] 백준 10798번 문제풀이 (0) | 2023.06.13 |