[LV.1] 문자열 내 마음대로 정렬하기

Heedon Ham·2024년 5월 22일
0
post-thumbnail

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.

제한사항

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

stringsnreturn
["sun", "bed", "car"]1["car", "bed", "sun"]
["abce", "abcd", "cdx"]2["abcd", "abce", "cdx"]

예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.


시도한 방법

  1. strings에서 각 element의 n번째 문자 뽑아서 배열로 저장
  2. enumerated를 별도로 저장해 해당 문자가 포함된 원본의 index 기억하기
  3. sorted된 배열을 별도로 저장
  4. sorted된 배열의 각 문자를 enumerated의 offset을 찾아서 strings의 index로 활용, 빈 배열에 해당 문자열을 추가한다.

문제점: 동일한 문자가 뽑힌 경우, 원본 문자열로 비교해야 하는데 이러면 조건문이 다시 추가되고 메모리 오류가 발생했다.


해결책

직접적으로 strings의 각 element의 해당 문자를 비교해서 sort를 해주면 될 것이다.

String 타입은 직접적으로 Int 타입을 통한 subscript를 활용해 해당 element를 찾을 수 없으므로, Index를 활용해서 구하려면 String.Index가 필수이다.

하지만 String 타입의 element를 [String]으로 변환해서 활용하면 각 문자는 Int 타입으로 subscript 접근이 가능하다.

import Foundation

func solution(_ t:String, _ p:String) -> Int {
	//기본: 문자 기준 오름차순 정렬하기
    //같은 문자인 경우: 원본으로 비교, 오름차순 정렬
    return strings.sorted { Array($0)[n] == Array($1)[n] ? $0 < $1 : Array($0)[n] < Array($1)[n] }    
}
profile
dev( iOS, React)

0개의 댓글