[3차] 파일명 정렬 : https://programmers.co.kr/learn/courses/30/lessons/17686?language=java#
특별한 알고리즘없이 Comparable을 이용해서 풀수있는 문제.
head, number, tail을 분리해서 head기준으로 정렬, 동일하다면 number기준 정렬하여 반환해주면 되는 문제이다.
문제 풀이는 아래와 같다.
import java.util.*;
class Solution {
public String[] solution(String[] files) {
File[] fileArr = new File[files.length];
//File배열 초기화
for(int i=0;i<files.length;i++){
fileArr[i] = new File(files[i]);
}
//정렬
Arrays.sort(fileArr);
for(int i=0;i<files.length;i++){
files[i] = fileArr[i].file;
}
return files;
}
class File implements Comparable<File>{
String file;
String head;
int number;
String tail;
public File(String file){
this.file = file;
StringBuilder headBuilder = new StringBuilder();
int idx=0;
char[] chars = file.toCharArray();
//숫자 문자가 나올때까지 head문자열
while(idx<chars.length && chars[idx] < '0' || chars[idx] > '9'){
headBuilder.append(chars[idx]);
idx++;
}
this.head = headBuilder.toString();
StringBuilder numberBuilder = new StringBuilder();
//숫자 문자가 아닌 다른 문자가 나올때까지 number문자열
while(idx<chars.length && chars[idx] >= '0' && chars[idx] <= '9'){
numberBuilder.append(chars[idx]);
idx++;
}
this.number = Integer.parseInt(numberBuilder.toString());
//number 문자열 이후부터 끝까지 tail문자열
this.tail = file.substring(idx);
}
@Override
public int compareTo(File o){
if(this.head.equalsIgnoreCase(o.head)){
return this.number-o.number;
}else{
return this.head.compareToIgnoreCase(o.head);
}
}
}
}