반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/17686
문제풀이
Java에서 사용자 정의로 정렬을 진행할때 Comparator를 사용한다. 이 문제는 Comparator를 사용할 줄 아는지 묻는 문제이다. 파일명을 head, number, tail로 분리한뒤 정렬을 다음 순서에 맞게 진행하면 된다.
head를 기준으로 문자열 오름차순으로 먼저 정렬한다. 이 때 대소문자 구분을 하지 않기 때문에 본인은 소문자로 통일한뒤 진행했다. head가 같은경우 number로 정렬하고 number도 같다면 기존 files의 순서를 지키면 된다.
풀이 자체가 Comparator 인터페이스를 구현하고 있다. 정렬을 할때 Comparator와 Comparable을 사용하곤 하는데 자세한 내용은 https://swjeong.tistory.com/198?category=778818 이 글을 참조하면 된다.
소스코드
import java.util.*;
class Solution {
public String[] solution(String[] files) {
Arrays.sort(files, new Comparator<String>() {
public int compare(String s1, String s2) {
String head1 = s1.split("[0-9]")[0];
String head2 = s2.split("[0-9]")[0];
s1 = s1.replace(head1, "");
s2 = s2.replace(head2, "");
head1 = head1.toLowerCase();
head2 = head2.toLowerCase();
// compareTo(x, y) => [ -1 : x < y | 0 : x == y | 1 : x > y ]
int headCompareValue = head1.compareTo(head2);
if (headCompareValue == 0) {
// head정렬 값이 같으므로 number로 정렬
String num1 = "";
for (char c : s1.toCharArray()) {
if (!(c >= '0' && c <= '9')) break;
num1 += c;
}
String num2 = "";
for (char c : s2.toCharArray()) {
if (!(c >= '0' && c <= '9')) break;
num2 += c;
}
return (Integer.parseInt(num1) - Integer.parseInt(num2));
} else {
return headCompareValue;
}
}
});
return files;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스 12980] - 점프와 순간이동 (0) | 2020.05.28 |
---|---|
[프로그래머스 1845] - 폰켓몬 (0) | 2020.05.28 |
[프로그래머스 17683] - 카카오 방금그곡 (0) | 2020.05.27 |
[프로그래머스 12977] - 소수 만들기 (0) | 2020.05.26 |
[프로그래머스 43164] - 여행경로 (0) | 2020.05.25 |