Swift로 풀어보는 파일명 정렬
import UIKit
typealias HNT = (String , String , String)
//파일을 HEAD , NUMBER , TAIL 부분으로 나눠주는 로직
//
func HEAD_NUMBER_TAIL_SLICE(_ item : String) -> HNT{
var Head : String = ""
var Number : String = ""
var HeadIndex : Int = 0
var NumberIndex : Int = 0
var Tail : String = ""
//꼬리부분을 알아내기 위해 사용
let LetterPlus : [String] = [" ",".","-"]
//받아온 String 을 배열 로 변경
let Name = item.map { $0 }
//Head 찾기
//받아온 스트링의 앞부분부터 숫자가 언제나오는지 찾기
for index in 0..<Name.count {
if(Name[index].isNumber){
HeadIndex = index
Head = item.substring(from: 0, to: HeadIndex - 1)
break
}
}
//Number찾기
//Head부분 이후 부터 LetterPlus + String 을 포함한 값이 나오기 전까지 for문
for index in HeadIndex..<Name.count {
if(Name[index].isLetter || LetterPlus.contains(String(Name[index]))){
NumberIndex = index
Number = item.substring(from: HeadIndex , to: NumberIndex - 1)
break
}
}
//나머지 값은 자연스럽게 Tail됨
Tail = item.substring(from: NumberIndex , to: Name.count - 1)
return (Head , Number , Tail)
}
func solution(_ files:[String]) -> [String] {
var HNTS : [HNT] = []
//받아온 String 배열을 Head Number Tail 나눠줌
HNTS = files.map{ HEAD_NUMBER_TAIL_SLICE($0) }
//우선순위가 낮은 숫자순으로 먼저 정렬을 해줌
HNTS.sort{ Int($0.1)! < Int($1.1)! }
//그후 대소문자 구분을 없이 하기위해 소문자로 계산하여 Head 를 정렬
HNTS.sort{ $0.0.lowercased() < $1.0.lowercased() }
//그후 Head Number Tail 나눠준것을 다시 합쳐주는 작업을 실행
return HNTS.map({ $0.0 + $0.1 + $0.2 })
}
//Swift에 따로 substring 이 없기떄문에 substring 을 따로 구현
extension String {
func substring(from: Int, to: Int) -> String {
guard from < count, to >= 0, to - from >= 0 else {
return ""
}
// Index 값 획득
let startIndex = index(self.startIndex, offsetBy: from)
let endIndex = index(self.startIndex, offsetBy: to + 1) // '+1'이 있는 이유: endIndex는 문자열의 마지막 그 다음을 가리키기 때문
// 파싱
return String(self[startIndex ..< endIndex])
}
}
print(solution(["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG","F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat"]))
결과값 :
["A-10 Thunderbolt II", "B-50 Superfortress", "F-5 Freedom Fighter", "F-14 Tomcat", "img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"]
출처 : https://programmers.co.kr/learn/courses/30/lessons/17686?language=swift
코테 공부를 따로 공부하지 않습니다. 심심할때 시간때울려고 풀고있습니다.
더 좋은 정답이 충분히 있을거라고 생각합니다.
'기타공부' 카테고리의 다른 글
코딩테스트 연습 2020 KAKAO BLIND RECRUITMENT 문자열 압축 Swift (0) | 2021.12.04 |
---|---|
코딩테스트 연습2020 KAKAO BLIND RECRUITMENT괄호 변환 Swift (0) | 2021.12.01 |
코딩테스트 - 해시 - 위장 Swift (0) | 2021.11.30 |