[Swift] 프로그래머스(Lv2) - [3차] 파일명 정렬 (2018 KAKAO BLIND RECRUITMENT )

Kerri·2021년 2월 28일
0

코테

목록 보기
1/67

안녕하세요 ~~ 벨로그의 첫 글은 오늘 푼 프로그래머스 코테 문제입니다.

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

regular expression 을 이용해서 head 부분과
number 부분으로 나누어서 풀이했습니다.

import Foundation


struct File {
    var head: String
    var number: Int
    var orgin: String
}

func solution(_ files:[String]) -> [String] {
    
    var newFiles = [File]()
    
    let headRegex = "^[\\D ]+"
    let numberRegex = "\\d{1,5}"
    
    for element in files {
        var head = ""
        var number = 0
        if let range1 = element.range(of: headRegex, options: [.regularExpression]) {
            head = String(element[range1])
            let temp = String(element[range1.upperBound...])
            
            if let range2 = temp.range(of: numberRegex, options: [.regularExpression]) {
                if let n = Int(temp[range2]) {
                    number = n
                }
            }
        }
//        print(head, number, element)
        newFiles.append(File(head: head, number: number, orgin: element))
    }
    
    newFiles.sort { (lhs, rhs) -> Bool in
        let first = lhs.head.lowercased()
        let second = rhs.head.lowercased()
        if first == second {
            let n1 = Int(lhs.number)
            let n2 = Int(rhs.number)
            return n1 == n2 ? false : n1 < n2
        } else {
            return first.compare(second) == .orderedAscending
        }
    }
    
    
    return newFiles.map { $0.orgin }
}

swift엔 numeric option이 있는데 그걸로 풀고 싶어서 붙잡고 있다가 numeric의 이상한 점을 발견해서 구조체로 풀었습니다...

Swift numeric 이란?

공식문서에서 찾아볼 수 있듯이 Name7.txt 와 Name25.txt 를 비교 했을 때 string 안에 있는 숫자를 "숫자"로 인식을 하고 정렬할 수 있는 기능이다.

아니근데 " 12" 이랑 "12" 비교하면 " 12" < "12" 로 나옵니다 ... (??????)
".12" 이랑 "12" 비교해도 ".12" < "12" 로 나옵니다....
"^12" 이랑 "12" 비교하면 "^12" > "12" 로 나옵니다.. 흠
아니 대체왜 ,,,,

그래서 이 문제에는 numeric 을 쓰면 답을 못구하겠더군요 .... 아니 Swift numeric 구조 이상하네요...
이 부분은 추후 정리해서 다뤄봐야겠습니다.

profile
안녕하세요 !

0개의 댓글