프로그래머스>코딩테스트 연습>2018 KAKAO BLIND RECRUITMENT>[3차] 파일명 정렬 - https://programmers.co.kr/learn/courses/30/lessons/17686
파일명을 세 부분으로 나누어 정렬하는 문제이다. 세 부분으로 나누지만 실제 정렬 시에는 HEAD와 NUMBER 부분만 고려하면 된다.
우선 filename을 세 부분으로 분리하고, File[]을 만들어 객체로 저장한다.
HEAD의 경우 대소문자 구분이 없으므로 전부 소문자로 변경한다. (or 대문자도 가능)NUMBER의 경우 문자열을 숫자로 바꾸어 저장한다.소팅한다. Arrays.sort()를 사용했고, Comparator을 정의해서 넣어주었다. 정렬하는 방법은 자꾸 잊어버려서 여기에 정리해두었다.
HEAD 부분이 같은지 확인해서 같다면 NUMBER 오름차순으로 정렬한다.HEAD 부분이 다르다면 HEAD부분을 기준으로 사전 순 정렬한다.정렬 된 File[] 배열의 원래 파일명을 리턴한다.
import java.util.Arrays;
import java.util.Comparator;
class Solution {
static class File{
String file_name;
String head;
int number;
public File(String file_name, String head, int number) {
this.file_name = file_name;
this.head = head;
this.number = number;
}
}
public static String[] solution(String[] files) {
File[] file_info = new File[files.length];
for (int i = 0; i < files.length; i++) {
String[] split = splitFileName(files[i]);
file_info[i] = new File(files[i], split[0], Integer.parseInt(split[1]));
}
Arrays.sort(file_info, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if ((o1.head).equals(o2.head)) { // HEAD 부분이 같다면
return o1.number-o2.number; // NUMBER 오름차순 정렬
}else{
return (o1.head).compareTo(o2.head); // HEAD 부분을 기준으로 사전 순 정렬
}
}
});
String[] answer = new String[files.length];
for (int i = 0; i < files.length; i++) {
answer[i] = file_info[i].file_name;
}
return answer;
}
// file name을 head, number, tail로 나누는 함수
public static String[] splitFileName(String file){
String str[] = new String[3];
str[0] = ""; // HEAD
str[1] = ""; // NUMBER
str[2] = ""; // TAIL
int idx = 0;
for (int i = 0; i < file.length(); i++) {
char c = file.charAt(i);
if(idx==0 && !Character.isDigit(c)){
str[idx] += c;
continue;
}
if(idx==0 && Character.isDigit(c)){
idx ++;
}
if(idx==1 && Character.isDigit(c)){
str[idx] += c;
continue;
}
if(idx==1 && !Character.isDigit(c)){
idx ++;
}
str[idx] += c;
}
str[0] = str[0].toLowerCase(); // 대소문자 구분 X, 소문자로 변환
return str;
}
}

난이도 : LEVEL 2
Collections.sort()를 사용하다가 삽질을 했다. 배열은 Arrays.sort()를 사용해야 한다! List 같은 것들이 Collections.sort()를 사용하는 것! 기억해 둘 것.딱히 없음