문제
문자열로 구성된 리스트 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. 주어진 strings 배열을 정렬한다.
처음엔 정렬하지 않았는데 정렬하지 않고 코드를 작성하면 두번째 입출력 예인 ["abce", "abcd", "cdx"]에서 정렬을 했을 때 abce, abcd, cdx로 정렬이 되었다. abce와 abcd는 2번째 인덱스가 c로같지만 문자열 전체를 비교했을 때는 3번째 인덱스에서 d보다 e가 사전 순으로 더 앞서기 때문에 abcd, abce, cdx로 정렬되어야한다.
그래서 먼저 배열을 한 번 사전 순 정렬했다.
var sortedStrings = strings.sorted()
2. 그리고 위에서 정렬된 배열을 리스트로 변경해서 주어진 n번째 인덱스를 기준으로 정렬을 했다.
처음엔 이게 될까 하고 작성했던 코드인데 오류 없이 잘 실행돼서 놀랐다. ㅎ
var a = sortedStrings.toList().sortedBy{ it[n] }
3. 정렬된 리스트 a를 반복문을 돌며 answer 배열에 추가한 후 return 한다.
a.forEach{
answer += it
}
return answer
코드
class Solution {
fun solution(strings: Array<String>, n: Int): Array<String> {
var answer = arrayOf<String>()
var sortedStrings = strings.sorted()
var a = sortedStrings.toList().sortedBy{ it[n] }
a.forEach{
answer += it
}
return answer
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12915
'Algorithm > kotlin' 카테고리의 다른 글
[프로그래머스/Kotlin] 모의고사 (Lv. 1) (0) | 2024.04.12 |
---|---|
[프로그래머스/Kotlin] 최소 직사각형 (Lv. 1) (0) | 2024.04.12 |
[프로그래머스/Kotlin] 가장 가까운 같은 글자 (Lv. 1) (2) | 2024.04.12 |
[프로그래머스/Kotlin] 3진법 뒤집기 (Lv. 1) (0) | 2024.04.08 |
[프로그래머스/Kotlin] 문자열 내림차순으로 정렬하기 (Lv. 0) (0) | 2024.04.08 |