본문 바로가기

개발 노트/알고리즘[Kotlin]

프로그래머스 알고리즘 문제[정수 내림차순으로 배치하기]

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

 

 

# 제한 조건

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

 

 

#입출력 예

ex) n = 118372, return = 873211

 

 

# 풀이

class Solution {
    fun solution(n: Long): Long =
        n.toString().toCharArray().sortedDescending().joinToString("").toLong()

}

 

n = 118372 라고 했을때 얘를 toString()을 사용해서 문자열로 바꿔준뒤,

toCharArray()를 사용해서 문자열을 한글자씩 분리해준다 ( toCharArray() 는 문자열을 한글자씩 분리해주는 역할, toList도 같은 역할을 함)

그런다음 sortedDescending()을 통해 내림차순으로 정렬해준뒤

joinToString("")을 사용해서 공백없이 연결된 873211문자열을 만들어준다

마지막으로 toLong()으로 Long타입으로 되돌려준다

 

118372 -> "118372" -> [1,1,8,3,7,2] -> [8,7,3,2,1,1] -> 873211

 

 

# toCharArray() , toList()

문자열을 한글자씩 분리시켜줌

 

# sorted()

리스트를 오름차순으로 정렬 (데이터 변경이 안되는 리스트 정렬)

 

# sort()

리스트를 오름차순으로 정렬 (데이터 변경이 가능한 리스트 정렬)

 

# sortedDescending()

리스트를 내림차순으로 정렬

 

# sortedWith()

문자 길이순서대로 정렬

 

# joinToString("")

separator에 "" 을 주면 공백없이 연결

 

 

 

 

# 다른 사람의 풀이

class Solution {
    fun solution(n: Long): Long {
       var answer = 0L

       answer = n.toString()
               .toCharArray()
               .sorted()
               .reversed()
               .joinToString("")
               .toLong()

       return answer
    }
}

 

-> sorted()를 통해 리스트를 오름차순으로 정렬한뒤, reversed()를 사용해서 그걸 뒤집었다

 

class Solution
{
    fun solution(n: Long): Long
    {
        var answer = ""
        var nList = n.toString().split("").toMutableList()

        nList.sort()
        nList.reverse()

        for (element in nList)
        {
            answer += element
        }

        return answer.toLong()
    }
}

split("")는 ""를 기준으로 문자열을 쪼개주는것!

n = 118372 

"118372 "  -> ""을 기준으로 숫자를 1,1,8,3,7,2로 쪼갠다음 toMutableList로 리스트 안에 넣어주고

sort와 reverse를 사용해서 정렬한뒤 뒤집어준다. [8,7,3,2,1,1] 이 nList에 들어갈것이다

nList의 값을 element에 하나씩 집어넣으면서 for문을 돈다. answer = answer+element

element = 8, answer = "8"

element = 7, answer = "7"

element = 3, answer = "3"

element = 2, answer = "2"

element = 1, answer = "1"

-> [8,7,3,2,1]

마지막으로 toLong()으로 Long타입으로 되돌려주면 87321이 나올것이다

 

class Solution {
    fun solution(n: Long): Long {
        val numArray = n.toString().toCharArray().sortedArray().reversedArray()
        var str : String = ""
        numArray.forEach { ch -> str+=ch }
        return str.toLong()
    }
}