-
Programmers Lv2) 파일명 정렬Algorithm/Programmers 2020. 8. 28. 15:42728x90
출처: 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) } } } }
배운점
어렵지 않은 문제였다.
정규표현식으로도 한번 풀어보자!!!
'Algorithm > Programmers' 카테고리의 다른 글
Programmers Lv4) [2020 카카오블라인드] 가사검색 (0) 2020.08.30 Programmers Lv2) [3차] n진수 게임 (0) 2020.08.28 Programmers Lv2) 압축 (0) 2020.08.28 Programmers Lv2) 방금그곡 (0) 2020.08.28 Programmers Lv2) 후보키 (0) 2020.08.25