문제설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한사항
n은 1이상 8000000000 이하인 자연수입니다.
진행
배열로 받은뒤 sortDescending을 이용해 내림차순으로 정렬하자
var arr = mutableListOf<Long>()
일단 크기가 불분명하니 가변리스트로 만들어준뒤
while (x > 0){
arr.add(x%10)
x /= 10
}
더이상 못나눌때까지 나눠주며 나머지를 리스트에 추가하기를 반복한다
arr.sortDescending()
리스트가 차면 내림차순으로 정렬해주자
var i = 0
while (i < arr.size){
answer += arr[i]
answer *= 10
i++
}
answer = answer /10
이제 순서대로 더해주고 10씩 곱해준다음 마지막에 10을 나누면 끝
코드
package com.example.codekata
import kotlin.math.sqrt
fun main() {
while (true) {
println("숫자 입력:")
var n = readln().toLong()
if (n < 1){
println("1이상이어야 합니다")
}else if (n > 8000000000){
println("숫자가 너무큽니다")
}
println("${solution(n)}")
}
}
fun solution(n: Long): Long {
var answer: Long = 0
var arr = mutableListOf<Long>()
var x = n
while (x > 0){
arr.add(x%10)
x /= 10
}
arr.sortDescending()
var i = 0
while (i < arr.size){
answer += arr[i]
answer *= 10
i++
}
answer = answer /10
return answer
}
결과