IOS/Swift Algorithm Level 1

Swift. 문자열 내 마음대로 정렬하기

  문제.

문자열로 구성된 리스트 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