본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 문자열 내 마음대로 정렬하기 Kotlin

by Echung 2023. 12. 15.

안녕하세요. 이번에는 프로그래머스 문자열 내 마음대로 정렬하기 문제를 풀어보려고 합니다.

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Problem

문자열로 구성된 리스트 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. 입출력 예

Solution

import java.util.*

class Solution {
    fun solution(strings: Array<String>, n: Int): Array<String> {
        Arrays.sort(strings) { s1, s2 ->
            if(s1[n] == s2[n]) {
                s1.compareTo(s2)
            } else {
                s1[n].compareTo(s2[n])
            }
        }

        return strings
    }
}

 이번 문제는 Arrays.sort를 활용해서 문자열을 비교하는 방법으로 문제를 풀어보았습니다. 

1. 다른 사람 코드

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

  저의 코드와 다르게 1줄로 작성된 코드가 있어서 공부용으로 가져와보았습니다. 

코드 분석

1. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 의 제한 사항을 해결하기 위해서 처음 sorted()를 통해서 정렬 해줍니다.

2. sortedBy {  it [n] }을 이용해서 인덱스 값은 문자열로 배열을 정렬해줍니다.

3. sorted를 사용하면 List이기 때문에 toTypedArray()를 사용하여 Array로 타입을 변환시켜 줍니다.

이렇게 코틀린에서 제공해 주는 함수들을 사용하여 코드의 가독성을 증가시킬 수 있는 코드였습니다.


Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형