문자열 내 마음대로 정렬하기

KSang·2023년 12월 11일
0

[Kotlin]코드카타

목록 보기
46/100

🕵️문제설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

⚠️제한사항

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

🔎로직설명

1차 코드

fun solution(strings: Array<String>, n: Int) = strings.sortedBy { it[n] }.toTypedArray()

sortedBy를 써서 n번째 문자를 기준으로 정렬 시켰다

그런데 문제가 생겼다

n번째 문자가 같을 경우 사전순으로 문자열을 또 정렬하는건데 이걸 잊고있었다

2차 코드

fun solution(strings: Array<String>, n: Int) = strings.sortedWith(compareBy({ it[n] }, { it })).toTypedArray()

이번엔 sortedWith() 함수를 배워서 이용해봤다

it[n]로 먼저 각 문자열을 정렬하고 그 뒤 it을 추가해 사전순으로 정렬하게 했다.

sortBy를 이용해서 다시

fun solution(strings: Array<String>, n: Int): Array<String> {
        return strings.also {
            it.sort()
            it.sortBy { it[n] }
        }
    }

그냥 처음에 사전순으로 정렬하고 그 뒤 n번째 문자를 정렬하면 끝

sortedWith

sortedWith 함수는 Kotlin에서 리스트를 정렬할 때 사용되는 함수이다.

함수는 비교 기준을 정의하는 함수를 인자로 받는다.

이 함수는 두 요소를 비교하고, 첫 번째 요소가 두 번째 요소보다 작으면 음수, 같으면 0, 크면 양수를 반환한다.

이 반환값에 따라 정렬이 이루어진다

fun main() {
    val matrix = arrayOf(
        arrayOf(3, 1, 4),
        arrayOf(1, 5, 9),
        arrayOf(2, 6, 5)
    )

    val col = 0 // 첫 번째 열을 기준으로 정렬

    val sortedMatrix = matrix.sortedWith(compareBy { it[col] })

    // 결과 출력
    sortedMatrix.forEach { row ->
        println(row.joinToString(", "))
    }
}
1, 5, 9
2, 6, 5
3, 1, 4 //결과
fun solution(matrix: Array<IntArray>): Array<IntArray> {
    return matrix.sortedWith(compareBy({ it[1] }, { it[0] })).toTypedArray()
}

fun main() {
    val matrix = arrayOf(
        intArrayOf(3, 1, 4),
        intArrayOf(4, 5, 9),
        intArrayOf(2, 6, 5),
        intArrayOf(1, 5, 1)  // 두 번째 열의 숫자가 5로 같음
    )

    val sortedMatrix = solution(matrix)

    // 결과 출력
    sortedMatrix.forEach { row ->
        println(row.joinToString(", "))
    }
}
3, 1, 4
1, 5, 1
4, 5, 9
2, 6, 5 //결과

처음에 정렬하고 같은 값이나와서 정렬하지 않았을때 추가로 정렬해줄수도 있다

위코드에서 4,5,9와 1,5,1이 2번째 열의 숫자가 같아 첫번째열의 숫자를 비교해서 추가로 정렬했다.

0개의 댓글