[프로그래머스] 정수 내림차순으로 배치하기

creativeBin·2022년 12월 29일
0

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건

  • n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

nreturn
118372873211

풀이

1) 버블정렬 (BubbleSort)
버블정렬이란?

😎 장점
구현이 매우 간단하고, 소스코드가 직관적이다.
정렬하고자 하는 배열 안에서 교환하는 방식이므로,
다른 메모리 공간을 필요로 하지 않다. => 제자리 정렬(in-place sorting)
안정 정렬(Stable Sort) 이다.

👿 단점
시간복잡도가 최악, 최선, 평균 모두 O(n^2)으로, 굉장히 비효율적이다.
정렬 돼있지 않은 원소가 정렬 됐을때의 자리로 가기 위해서,
교환 연산(swap)이 많이 일어나게 된다.

2) 자체 함수를 쓰지않고 정렬 알고리즘으로 풀기로 결정!
3) 풀이보다 더 코드를 간단하게 쓸 수도 있었던것 같아서
레퍼런스를 더 면밀히 살펴봐야겠다는 생각이 들었음.

class Solution {
    fun solution(n: Long): Long {                

        val str = n.toString()                        
        val split = str.split("").filter{it != "" }

        var numArr = ArrayList<Int>();        
        split.map { numArr.add(it.toInt()) }                
    
        for(i in numArr.size-1 downTo 1){

            for(j in 0 until i){
                
                if(numArr[j]<numArr[j+1]){
                    val temp = numArr[j+1]
                    numArr[j+1] = numArr[j]
                    numArr[j] = temp
                }
            }
        }        

        return numArr.map { it.toString() }.joinToString("").toLong()                                   
    }
}

코틀린 자체 내 함수 사용방법

class Solution {
    fun solution(n: Long): Long = String(n.toString().toCharArray().sortedArrayDescending()).toLong()
}
class Solution {
    fun solution(n: Long): Long {
        return n.toString().map {
        	it.toString().toInt()
    	}.sortedDescending().joinToString(separator = "").toLong()
    }
}
profile
언제나 항상 즐겁게 New vibes 😎

0개의 댓글