내 마음대로 정렬하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.' 라는 문제 핵심을 잘 이해해야만 풀 수 있는 문제다. 은근히 문제 자체를 이해하기가 어렵다..
#1. 문자열 배열을 문자 단위로 분리하고 다시 배열로 변환:
var strings = strings.map { $0.map { String($0) } }
우선, 입력으로 받은 문자열 배열 strings의 각문자열을문자단위로분리한다. 내부의 .map { String($0) }은 각 문자를 다시 문자열로 변환하여, 결과적으로 각 문자열이 문자열 배열로 변환된다. ( ["abc", "def"]가 입력되면 [["a", "b", "c"], ["d", "e", "f"]]로 변환된다)
#2. 정렬 조건을 적용하여 배열 정렬:
strings.sort {
if $0[n] == $1[n] { //두 문자열의 n번째 문자가 같은지를 확인. 만약 같다면, 조건문 내부 코드 실행
return $0.joined() < $1.joined() //각각 비교 중인 두 문자열 배열을 하나의 문자열로 합친 결과
}
return $0[n] < $1[n] //n번째 문자가 서로 다를 경우에 실행
}
정렬 조건을 적용하여 strings 배열을 정렬한다. 먼저, 두 문자열의 n번째 문자를 비교해야 하는데, $0[n]과 $1[n] 이 문자들이 같다면, 전체 문자열을 사전순으로 비교하여 정렬하고, $0.joined() < $1.joined() n번째 문자가 다르다면, 이 문자들을 기준으로 정렬한다. (sort 메소드는 배열 자체를 변경한다.)
#3. 정렬된 배열을 문자열로 변환하여 반환:
return strings.map { $0.joined() }
마지막으로, 정렬된 문자열 배열을 다시 전체 문자열로 변환하여 반환한다. 각 내부 배열을 .joined() 메소드를 사용하여 문자열로 합치고, 이를 새로운 배열로 만들어 반환해준다.
전체 코드 ▽
func solution(_ strings:[String], _ n:Int) -> [String] {
var strings = strings.map { $0.map { String($0) } }
strings.sort {
if $0[n] == $1[n] {
return $0.joined() < $1.joined()
}
return $0[n] < $1[n]
}
return strings.map { $0.joined() }
}
'iOS 앱 개발자 프로젝트 > 알고리즘 코드카타' 카테고리의 다른 글
[Algorithm] 콜라 문제 (w/ Swift) (2) | 2024.04.09 |
---|---|
[Algorithm] 부족한 금액 계산하기 (w/ Swift) (0) | 2024.04.08 |
[Algorithm] 신고 결과 받기 (w/ Swift) (0) | 2024.03.28 |
[Algorithm] 공원 산책 (w/ Swift) (0) | 2024.03.27 |
[Algorithm] 달리기 경주 (w/ Swift) (0) | 2024.03.26 |