안녕하세요. 이번에는 프로그래머스 문자열 내 마음대로 정렬하기 문제를 풀어보려고 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12915
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의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
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. 다른 사람 코드 |
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 Kotlin (2) | 2023.12.17 |
---|---|
[프로그래머스] 푸드 파이트 대회 Kotlin (0) | 2023.12.16 |
[프로그래머스] K번째 수 Kotlin (0) | 2023.12.14 |
[프로그래머스] 가장 가까운 같은 글자 Kotlin (0) | 2023.12.13 |
[프로그래머스] 숫자 문자열과 영단어 Kotlin (0) | 2023.12.12 |