문제.
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
제한 조건.
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
import Foundation
func solution(_ strings:[String], _ n:Int) -> [String] {
let index = strings[0].index(strings[0].startIndex, offsetBy: n)
let sorting = strings.sorted(by: { (string1: String, string2: String) -> Bool in
if string1[index] == string2[index] {
return string1 < string2
} else { return string1[index] < string2[index] }
})
return sorting
}
- 배열안의 문자열의 특정 위치를 조회하는 것이였는데, 맨처음에는 배열안의 문자열을 다쪼개려고 하다가 방향이 이것이 아닌걸 깨닫고는 다른방식을 고민했다.( for문안에서 map이 안써졌기때문)
- 한참을 위의 인덱스를 어떻게 할까 고민하다가 검색끝에 방법을 찾았다.
- 근데 결과는... 방법을 찾아도... ㅜㅜ sorted()이렇게만 써봤지 다른 형태는 본적도 없고 해서 다른분이 올려둔 풀이를 보며 열심히 해석하면서 풀었다.
- 이번 문제는 접근방법 자체가 조금 어려웠던 만큼 상당히 많이 배울수 있었다.
- 풀고나서 프로그래머스의 다른사람의 한줄 풀이를 보게 되었는데 항상 천외천을 느끼는 것 같다.
func solution(_ strings:[String], _ n:Int) -> [String] {
return strings.sorted{ Array($0)[n] == Array($1)[n] ? $0 < $1 : Array($0)[n] < Array($1)[n] }
}
'IOS > Swift Algorithm Level 1' 카테고리의 다른 글
Swift. 3진수 뒤집기 (0) | 2020.10.13 |
---|---|
Swift. 문자열 내 p와 y의 개수 (0) | 2020.10.12 |
Swift. 나누어 떨어지는 숫자 배열 (0) | 2020.10.09 |
Swift. 가운데 문자열 (0) | 2020.10.08 |
Swift. 2016년 (0) | 2020.10.07 |