개발일지

23023.12.29 TIL

과일바구니♡ 2023. 12. 29. 20:55

1. 배운내용

  1)알고리즘코드카타

     정수내림차순으로배치하기

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

 

class Solution {
    fun solution(n: Long): Long {
        LongArray = LongArray(n)n.toString().reversed().map { e -> e.toString().toInt() }.tolongArray() }
        return answer
    }

 

어레이는 들어갈것 같고, 거꾸로 숫자 바꾸는 reversed()는 쓸것 같아 넣었다. 2일전 코드카타 문제 해답설명 블로그에서 옮겨 적은게 있어서 사용해봤다. 틀릴것 같지만.. 그리고 틀렸다.  정답을 봤다.

 

정답 

class Solution {
    fun solution(n: Long): Long = String(n.toString().toCharArray().sortedArrayDescending()).toLong()
}

 

class Solution {
    fun solution(n: Long): Long {
        val chars = n.toString().toCharArray()

        chars.sortDescending()

        return chars.joinToString("").toLong()
    }
}

 

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()
    }
}
class Solution {
    fun solution(n: Long): Long {
        var array = IntArray(n.toString().length, {0})
        for(i in n.toString().indices){
            array[i] = n.toString()[i].toString().toInt()
        }
        array.sortDescending()
        var answer = ""
        for(i in array.indices){
            answer += array[i].toString()
        }
        return answer.toLong()
    }
}

 

구글에서 검색해서 블로그에서 본 글입니다.

  • sortedArrayDescending()
    fun <T : Comparable<T>> Array<T>.sortedArrayDescending(): Array<T>
    : 내림차순으로 정렬된 새로운 배열 반환
    : 원본 배열은 그대로 둠
  • sortedArray()
    fun <T : Comparable<T>> Array<T>.sortedArray(): Array<T>
    : 오름차순으로 정렬된 새로운 배열 반환
    : 원본 배열은 그대로 둠
  • sort()
    fun <T : Comparable<T>> Array<out T>.sort()
    : 원본 배열을 오름차순으로 정렬
  • sortDescending()
    fun <T : Comparable<T>> Array<out T>.sortDescending()
    : 원본 배열을 내림차순으로 정렬

-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()
    }
}

 

-이전에 풀던 문제에서 함수를 가져왔다

그렇게 완성된 MutableList를 내림차순으로 정렬하려고 찾아보았더니

먼저 sort() 메소드를 통해 오름차순으로 정렬하고

reverse() 메소드로 역순 정렬을 할 수 있었다.

 

이렇게 내림차순으로 완성한 MutableList를 비어있는 String 변수에

0번 인덱스부터 차례대로 추가해주었고 이를 Long타입으로 변환하여 리턴될 answer 변수에 대입해주었다.

 

 

2) 과제 코드 작성

과제 코드들중 생성관련해서 코드작성하고,DB(supbase) 연결했다.

코드 에러들을 튜터님등 도움을 받아 해결해서 사이트가 되는 것을 확인하고 깃허브에 과제를 올렸다.

리드미에 API, ERD도 추가로 올렸다.

저녁먹은후, 조회에 관한 코드들을 작성하고자 한다. 어떻게 될지는 모르겠다.

'개발일지' 카테고리의 다른 글

20204.1.3 TIL  (0) 2024.01.03
2024.01.02 TIL  (0) 2024.01.02
2023.12.28 TIL  (0) 2023.12.28
2023.12.27 TIL  (0) 2023.12.27
2023.12.26 TIL  (1) 2023.12.26