[프로그래머스] 파일명 정렬 (JAVA/자바) - 2018 카카오 기출
문제
프로그래머스>코딩테스트 연습>2018 KAKAO BLIND RECRUITMENT>[3차] 파일명 정렬 - https://programmers.co.kr/learn/courses/30/lessons/17686
풀이
파일명을 세 부분으로 나누어 정렬하는 문제이다. 세 부분으로 나누지만 실제 정렬 시에는 HEAD
와 NUMBER
부분만 고려하면 된다.
-
우선 filename을 세 부분으로 분리하고, File[]을 만들어 객체로 저장한다.
HEAD
의 경우 대소문자 구분이 없으므로 전부 소문자로 변경한다. (or 대문자도 가능)NUMBER
의 경우 문자열을 숫자로 바꾸어 저장한다.
-
소팅한다.
Arrays.sort()
를 사용했고, Comparator을 정의해서 넣어주었다. 정렬하는 방법은 자꾸 잊어버려서 여기에 정리해두었다.HEAD
부분이 같은지 확인해서 같다면NUMBER
오름차순으로 정렬한다.HEAD
부분이 다르다면HEAD
부분을 기준으로 사전 순 정렬한다.
-
정렬 된 File[] 배열의 원래 파일명을 리턴한다.
코드
import java.util.Arrays;
import java.util.Comparator;
class Solution {
static class File{
String file_name;
String head;
int number;
public File(String file_name, String head, int number) {
this.file_name = file_name;
this.head = head;
this.number = number;
}
}
public static String[] solution(String[] files) {
File[] file_info = new File[files.length];
for (int i = 0; i < files.length; i++) {
String[] split = splitFileName(files[i]);
file_info[i] = new File(files[i], split[0], Integer.parseInt(split[1]));
}
Arrays.sort(file_info, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if ((o1.head).equals(o2.head)) { // HEAD 부분이 같다면
return o1.number-o2.number; // NUMBER 오름차순 정렬
}else{
return (o1.head).compareTo(o2.head); // HEAD 부분을 기준으로 사전 순 정렬
}
}
});
String[] answer = new String[files.length];
for (int i = 0; i < files.length; i++) {
answer[i] = file_info[i].file_name;
}
return answer;
}
// file name을 head, number, tail로 나누는 함수
public static String[] splitFileName(String file){
String str[] = new String[3];
str[0] = ""; // HEAD
str[1] = ""; // NUMBER
str[2] = ""; // TAIL
int idx = 0;
for (int i = 0; i < file.length(); i++) {
char c = file.charAt(i);
if(idx==0 && !Character.isDigit(c)){
str[idx] += c;
continue;
}
if(idx==0 && Character.isDigit(c)){
idx ++;
}
if(idx==1 && Character.isDigit(c)){
str[idx] += c;
continue;
}
if(idx==1 && !Character.isDigit(c)){
idx ++;
}
str[idx] += c;
}
str[0] = str[0].toLowerCase(); // 대소문자 구분 X, 소문자로 변환
return str;
}
}
정리
난이도 : LEVEL 2
🤦♀️ 메모
- File[] 배열도 배열인데, 잘못 생각해서 자꾸
Collections.sort()
를 사용하다가 삽질을 했다. 배열은Arrays.sort()
를 사용해야 한다! List 같은 것들이Collections.sort()
를 사용하는 것! 기억해 둘 것.
참고 사이트
딱히 없음
Author And Source
이 문제에 관하여([프로그래머스] 파일명 정렬 (JAVA/자바) - 2018 카카오 기출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yanghl98/프로그래머스-파일명-정렬-JAVA자바-2018-카카오-기출저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)