Algorithm/kotlin

[프로그래머스/Kotlin] 문자열 내 마음대로 정렬하기 (Lv. 1)

나연쓰 2024. 4. 12. 11:43

문제

문자열로 구성된 리스트 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

 

프로그래머스

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

programmers.co.kr