이번에 풀어본 문제는
프로그래머스 파일명 정렬 입니다.
import java.util.*;
class Solution {
public String[] solution(String[] files) {
Arrays.sort(files, new Comparator<String>() {
@Override
public int compare(String file1, String file2) {
String[] arr1 = fileToArr(file1);
String[] arr2 = fileToArr(file2);
int compareResult = arr1[0].compareTo(arr2[0]);
if (compareResult == 0) {
return Integer.parseInt(arr1[1]) - Integer.parseInt(arr2[1]);
}
return compareResult;
}
});
return files;
}
static String[] fileToArr(String file) {
int fileSize = file.length();
int i = 0;
String tmpHead = "";
for (; i < fileSize; i++) {
char cur = file.charAt(i);
if (cur >= '0' && cur <= '9') {
break;
}
tmpHead += cur;
}
String tmpNumber = "";
for (; i < fileSize; i++) {
char cur = file.charAt(i);
if (cur < '0' || cur > '9') {
break;
}
tmpNumber += cur;
}
String tmpTail = "";
for (; i < fileSize; i++) {
tmpTail += file.charAt(i);
}
return new String[]{tmpHead.toLowerCase(), tmpNumber, tmpTail};
}
}
주어진 규칙대로 파일명을 정렬하는 문제입니다.
파일명의 인덱스를 순차탐색하여, 숫자를 만난 시점까지는 Head, 숫자부터 숫자가 아닌 인덱스를 만난 지점까지는 Number, 이후는 Tail로 나누고 해당 값을 기준으로 정렬해주면 해결할 수 있습니다.
규칙이 복잡해서 문제를 이해하는게 더 힘들었던 것 같습니다..ㅠ