본문 바로가기
Problem Solving

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

by DuncanKim 2023. 1. 19.
728x90

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

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

프로그래머스

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

programmers.co.kr

 

2. 접근

일단 접근은 쉽다. n번째 인덱스를 기준으로 정렬하라는 것.

마지막 입출력 예를 보면 오름차순 정렬을 기본으로 해야 한다는 것을 알 수 있다.

 

그럼 먼저 오름차순 정렬을 하고, 그 다음에 새로 n번째 인덱스를 기준으로 정렬을 해주면 된다는 생각을 했다.

 

sorted(by:) 함수는 파라미터에 쓰여있는 기준에 따라 새로운 배열을 리턴해준다. sorted()를 두 번 쓸 수도 있기 때문에 이 방법대로 해보기로 했다. 세 줄 코드로 통과는 하긴 했는데, 궁금함이 있었다.

 

어쨌든 오름차순으로 정렬을 한 번 하고, 특정 기준에 따라서 정렬을 하는데도 이전에 한 오름차순 정렬이 그렇게 크게 달라지지 않았다는 것이 의문이었다.

 

만약 ["abc", "bcd", "cde", "abb", "bac"] 과 같은 배열이 주어진다면, 단순한 오름차순 정렬로는 ["abb", "abc", "bac", "bcd", "cde"] 이렇게 될 것이다. 그런데, 여기에서 index = 1 을 기준으로 다시 재정렬을 한다면? ["bac", "abc", "abb",  "bcd", "cde"] 이렇게 될 수도 있지 않을까? 이전에 한 정렬이 풀리듯 말이다.

 

그래서 문제를 풀고 그냥 써왔던 sort()와 sorted() 함수에 대해 공부를 해보았는데,,, 꽤나 흥미로운 이야기들이 많았다.

Tim Sort라는 정렬 알고리즘을 채택하고 있으며... 안정 정렬이 무엇이고,,, 불안정 정렬이 무엇이고,,, 하는 이야기들이 있었다.

이것은 따로 정리를 해서 올려야 겠다.

 

https://www.youtube.com/watch?v=NVIjHj-lrT4 

유튜브 영상이 기깔나게 Tim Sort 방식을 시각화하여 알려준다. 계속 보고 있으면 마음의 안정이 찾아올 수 있다.

 

3. 코드

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

 

728x90

댓글