[프로그래머스] 파일명 정렬 - Swift

이창형·2023년 4월 25일
0

문제가 길어 링크로 대체하겠습니다

https://school.programmers.co.kr/learn/courses/30/lessons/17686

카카오 문제가 유독 길어요

코드

import Foundation

func solution(_ files:[String]) -> [String] {
	// head, number, index를 분리해서 저장할 곳
    var answer = [(String,Int,Int)]()
    var idx = 0
    // 인덱스만 저장
    var idxArray = [Int]()
    // files에서 인덱스 순서로 뽑아서 넣어줄 곳
    var sol = [String]()
    
    for file in files {
        // 앞에서부터 숫자까지 뽑기
        var head = file.prefix { !$0.isNumber }.lowercased()
        // 앞에서 숫자까지 드랍 후 다시 숫자까지 뽑기
        var number = file.drop { !$0.isNumber }.prefix{ $0.isNumber }
        
        // 5자 이상이면 tail로 가기 때문에 5자리까지만
        if number.count > 5 {
            number = number.prefix(5)
        }
        
        answer.append((head, Int(number)!, idx))
        idx += 1
    }
    
    // head으로 정렬 후 head가 같으면
    // number로 정렬
    var ans = answer.sorted(by: {
        if $0.0 == $1.0 {
            return $0.1 < $1.1
        }
        return $0.0 < $1.0
    })
    
    // 기존 인덱스만 따로 저장
    for i in ans {
        idxArray.append(i.2)
    }
    
    // 순서대로 인덱스를 뽑아 답을 냄
    for i in 0..<idxArray.count {
        var j = files[idxArray[i]]
        sol.append(j)
    }
    
    return sol
}

회고

  • prefix를 while문처럼 쓸 수 있다는 것을 알게되었다
  • drop이라는 함수를 알게되었습니다
  • 문자열만 잘 건들 수 있으면 어렵지 않은 문제였습니다
profile
iOS Developer

0개의 댓글