안녕하세요 ~~ 벨로그의 첫 글은 오늘 푼 프로그래머스 코테 문제입니다.
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 구조 이상하네요...
이 부분은 추후 정리해서 다뤄봐야겠습니다.