Problem : https://programmers.co.kr/learn/courses/30/lessons/17686
코딩테스트 연습 - [3차] 파일명 정렬
파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램
programmers.co.kr
Approach
2018 KAKAO BLIND RECRUITMENT 문제였다.
자바로 풀이하려면 Comparator를 활용하여 정렬의 기준을 override 해주면 된다.
우선 숫자가 나오기 전까지 문자열을 가지고 알파벳 정렬을 수행한 후,
만약 같다면 숫자 부분을 가지고 숫자 정렬을 수행한다.
Code
import java.util.Arrays;
import java.util.Comparator;
public class FilenameSort {
public static void main(String[] args) {
String[] files = {"img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"};
FilenameSort fs = new FilenameSort();
String[] ans = fs.solution(files);
for (int i = 0; i < ans.length; i++) {
System.out.println(ans[i] + " ");
}
}
public String[] solution(String[] files) {
Arrays.sort(files, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1.split("[0-9]")[0];
String s2 = o2.split("[0-9]")[0];
int result = s1.toLowerCase().compareTo(s2.toLowerCase());
if (result == 0) {
result = getNum(o1, s1) - getNum(o2, s2);
}
return result;
}
});
return files;
}
static int getNum(String s, String h) {
s = s.replace(h, "");
String result = "";
for(char c : s.toCharArray()) {
if(Character.isDigit(c) && result.length() < 5 ) {
result += c;
}else
break;
}
return Integer.valueOf(result);
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[java] 프로그래머스 (추석 트래픽) Level 3 (0) | 2021.01.24 |
---|---|
[java] 프로그래머스 (n진수 게임) Level 2 (0) | 2021.01.21 |
[java] 프로그래머스 (압축) Level 2 (0) | 2021.01.21 |
[java] 프로그래머스 (방금그곡) Level 2 (0) | 2021.01.19 |
[java] 프로그래머스 (후보키) Level 2 (0) | 2021.01.19 |