문제
문제링크
접근
- 자바 정규식을 활용하면 쉽게 풀이할 수 있다.
- 특정한 로직으로 정렬을 할때는 Comparable을 상속 받고, compareTo 메서드를 오버라이드하여 활용한다.
풀이
import java.util.*;
class Solution {
public String[] solution(String[] files) {
String[] answer = new String[files.length];
List<File> fs = new ArrayList<>();
for (String f : files)
fs.add(new File(f));
Collections.sort(fs);
for (int i = 0; i < files.length; i++)
answer[i] = fs.get(i).name;
return answer;
}
class File implements Comparable<File> {
String name, head;
int number = 0;
public File(String name) {
this.name = name;
this.head = name.split("[0-9]")[0].toUpperCase();
String numStr = name.substring(this.head.length(), Math.min(this.head.length() + 5, name.length()));
numStr = numStr.split("[^0-9]")[0];
this.number = Integer.parseInt(numStr);
}
@Override
public int compareTo(File f) {
int headDiff = this.head.compareTo(f.head);
if (headDiff != 0) return headDiff;
int numDiff = this.number - f.number;
return numDiff;
}
}
}