Algorithm/Programmers
Programmers Lv2) 파일명 정렬
삼쓰 웅쓰
2020. 8. 28. 15:42
728x90
출처: programmers.co.kr/learn/courses/30/lessons/17686
분류: Lv2, 카카오 블라인드 2018 3차
접근방식
주어진 조건으로 파일을 정렬하는 문제입니다.
문제에서 head, number, tail 3부분으로 나눠서 정렬하라고 하고 있는데요,
하라는 대로 분류해서 head, number, tail 을 프로퍼티로 갖는 File 이라는 struct를 만들고 정렬했습니다.
저는 File을 만들 때 Init 에서 바로 분류 해줬는데요,
분류할 때는 정규표현식을 쓸 수도 있을 것 같은데 중간에 숫자있는 부분만 number로 만들어주면 되어서
current 변수를 하나 두고 처음부터 읽어가면서 분류해줬습니다.
mutating func parseFile(_ file: String) {
// 0: head, 1: number, 2: tail
var current = 0
for char in file.lowercased() {
if current == 0 {
if let _ = Int(String(char)) {
number.append(char)
current += 1
} else {
head.append(char)
}
} else if current == 1 {
if let _ = Int(String(char)) {
number.append(char)
} else {
tail.append(char)
current += 1
}
} else {
tail.append(char)
}
}
}
해결방법
func solution(_ files:[String]) -> [String] {
var fileList = [File]()
for file in files {
fileList.append(File(text: file))
}
fileList.sort { (f1, f2) -> Bool in
if f1.head == f2.head {
let n1 = Int(f1.number)!
let n2 = Int(f2.number)!
return n1 == n2 ? false : n1 < n2
} else {
return f1.head < f2.head
}
}
return fileList.map { $0.text }
}
struct File {
var text: String
var head: String = ""
var number: String = ""
var tail: String = ""
init(text: String) {
self.text = text
self.parseFile(text)
}
mutating func parseFile(_ file: String) {
// 0: head, 1: number, 2: tail
var current = 0
for char in file.lowercased() {
if current == 0 {
if let _ = Int(String(char)) {
number.append(char)
current += 1
} else {
head.append(char)
}
} else if current == 1 {
if let _ = Int(String(char)) {
number.append(char)
} else {
tail.append(char)
current += 1
}
} else {
tail.append(char)
}
}
}
}
배운점
어렵지 않은 문제였다.
정규표현식으로도 한번 풀어보자!!!