🍄 코딩테스트
코딩테스트 문제 풀이
✍🏻 Github
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건
입출력 예
strings | n | return |
---|---|---|
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
입출력 예 설명
입출력 예 1
"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.
입출력 예 2
"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다. 따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는 사전순으로 정렬하면 "abcd"가 우선하므로, 답은 ["abcd", "abce", "cdx"] 입니다.
func solution(_ strings:[String], _ n:Int) -> [String] {
return strings.sorted{ ( $0[String.Index(encodedOffset: n)] < $1[String.Index(encodedOffset: n)] ) || ($0[String.Index(encodedOffset: n)] == $1[String.Index(encodedOffset: n)] && $0 < $1) }
}
테스트 1 〉 통과 (0.09ms, 16.5MB)
테스트 2 〉 통과 (0.10ms, 16.3MB)
테스트 3 〉 통과 (0.14ms, 16.5MB)
테스트 4 〉 통과 (0.15ms, 16.5MB)
테스트 5 〉 통과 (0.09ms, 16.3MB)
테스트 6 〉 통과 (0.19ms, 16.5MB)
테스트 7 〉 통과 (0.10ms, 16.2MB)
테스트 8 〉 통과 (0.16ms, 16.4MB)
테스트 9 〉 통과 (0.13ms, 16.3MB)
테스트 10 〉 통과 (0.25ms, 16.5MB)
테스트 11 〉 통과 (0.09ms, 16.5MB)
테스트 12 〉 통과 (0.36ms, 16.5MB)
func solution(_ strings:[String], _ n:Int) -> [String] {
return strings.sorted{ Array($0)[n] == Array($1)[n] ? $0 < $1 : Array($0)[n] < Array($1)[n] }
}
테스트 1 〉 통과 (0.09ms, 16.3MB)
테스트 2 〉 통과 (0.20ms, 16.4MB)
테스트 3 〉 통과 (1.53ms, 16.5MB)
테스트 4 〉 통과 (1.39ms, 16.4MB)
테스트 5 〉 통과 (0.30ms, 16.5MB)
테스트 6 〉 통과 (3.33ms, 16.6MB)
테스트 7 〉 통과 (0.36ms, 16.6MB)
테스트 8 〉 통과 (0.52ms, 16.4MB)
테스트 9 〉 통과 (0.45ms, 16.6MB)
테스트 10 〉 통과 (6.94ms, 16.3MB)
테스트 11 〉 통과 (0.17ms, 16.4MB)
테스트 12 〉 통과 (15.57ms, 16.4MB)
문제 해결 방법
이 풀이는 나의 풀이와 방법은 같지만, Array를 이용하여 n번째의 문자열을 도착하였다.
아무래도 배열을 사용하다보니, 실행시간이 좀 더 오래 걸렸다.
String.Index(encodedOffset: n)