지문에서 요구하는 정렬 기준에 따라서 정렬을 해주면 되는 문제다. Java의 경우에는 Comparator
를 잘사용할 줄 알아야 풀 수 있는 문제였다.
HEAD
, NUMBER
, TAIL
로 분리한다.toLowerCase()
또는 toUpperCase()
로 소문자, 또는 대문자로 통일해준다.HEAD
기분으로 문자열 오름차순 정렬을 수행한다.HEAD
가 같을 경우 NUMBER
를 INT
형으로 변환하여 비교한다.NUMBER
가 같은 경우에는 0
을 반환하게 되어 원래의 순서를 지킨다.import java.util.*;
class Solution {
public String[] solution(String[] files) {
Arrays.sort(files, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String[] file1 = detach(s1);
String[] file2 = detach(s2);
int headValue = file1[0].compareTo(file2[0]);
if(headValue == 0) {
int num1 = Integer.parseInt(file1[1]);
int num2 = Integer.parseInt(file2[1]);
return num1 - num2;
} else {
return headValue;
}
}
private String[] detach(String str) {
String head = "";
String number = "";
String tail = "";
int idx = 0;
for( ; idx < str.length() ; ++idx) {
char ch = str.charAt(idx);
if(ch >= '0' && ch <= '9') break;
head += ch;
}
for( ; idx < str.length() ; ++idx) {
char ch = str.charAt(idx);
if(!(ch >= '0' && ch <= '9')) break;
number += ch;
}
for( ; idx < str.length() ; ++idx) {
char ch = str.charAt(idx);
tail += ch;
}
String[] file = {head.toLowerCase(), number, tail};
return file;
}
});
return files;
}
}