
문제요약
[로그를 다음과 같은 기준으로 재정렬하는 문제]
- 로그의 가장 앞부분은 식별자 , 순서에 영향을 끼치지 않음
- 문자로 구성된 로그가 숫자로 구성된 로그보다 앞에 오며 , 사전순으로 정렬
- 문자가 동일한 경우에는 식별자순으로 정렬
- 숫자 로그는 입력 순서대로 (= 정렬 기준 x)
문제 접근
1. 문자로 구성된 로그와 숫자로 구성된 로그를 분리
List<String> letterList = new ArrayList<>(); , List<String> numList = new ArrayList<>();
2-1. 별도의 리스트를 사용해 문자 로그들을 삽입
for (String log : logs) {
if (Character.isDigit(log.split(" ")[1].charAt(0))){
numList.add(log);
}else{
letterList.add(log);
}
}
2-2. 조건에 따라 정렬 (공백을 기준으로 분리 후 식별자 다음으로 오는 로그의 숫자 여부로 리스트 분리)
letterList.sort((s1 , s2) -> {
String[] s1x = s1.split(" ", 2);
String[] s2x = s2.split(" ", 2);
//문자가 동일한 경우 식별자 순으로 비교
if (compared == 0){
return s1x[0].compareTo(s2x[0]);
}else{
return compared;
}
});
3. 문자 리스트 정렬이 완료되었기 때문에 그 뒤로 남은 리스트들 붙여줌
letterList.addAll(numList);
return letterList.toArray(new String[0]);
//toArray(new String[0]) -> 리스트를 배열로 전환