티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/12915?language=swift 

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱

programmers.co.kr

정렬 level1

문자열 배열을 인덱스 n번째 문자를 기준으로 사전순으로 정렬한 배열을 반환하는 문제

 

접근방법

사용자 정의 정렬이다.

C++에서 sort 라이브러리 함수에 자체적으로 구현한 compare함수를 전달하는 것과 같은 방식으로

swift에서도 Array의 sorted()메서드의 by 매개변수로 클로저나 함수를 전달하여 사용할 수 있다.

 

*sort()와 sorted() 메서드의 차이점

: sort()는 기존 array의 순서를 변경하고, sorted()는 기존 array는 그대로 두고 복사된 array를 정렬하여 반환

 

이 문제를 풀면서 Swift String이 Subscript가 안되는 것이 매우 불편했다.

String을 Character들의 배열로 사용하는 것에 익숙해서 -> 이렇게 풀고 싶다면 String을 Array로 변환하여 사용하면 된다. (solution2)

index를 만들어 사용하는 것이 조금 불편했다. (solution1)

 

소스코드

import Foundation

func solution1(_ strings:[String], _ n:Int) -> [String] {
    return strings.sorted {
        let index0 = $0.index($0.startIndex, offsetBy: n)
        let index1 = $1.index($1.startIndex, offsetBy: n)
        if $0[index0] == $1[index1] { return $0 < $1 }
        else { return $0[index0] < $1[index1] }
    }
}

func solution2(_ strings:[String], _ n:Int) -> [String] {
    return strings.sorted { Array($0)[n] == Array($1)[n] ? $0 < $1 : Array($0)[n] < Array($1)[n] }
}

 

댓글
댓글쓰기 폼