[프로그래머스] 카카오_파일명 정렬 (자바 풀이)
- 알고리즘 문제 해결(PS)/[프로그래머스]
 - 2022. 2. 15.
 
문제
https://programmers.co.kr/learn/courses/30/lessons/17686?language=java
코딩테스트 연습 - [3차] 파일명 정렬
파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램
programmers.co.kr
풀이
이 문제를 자바를 이용해 풀기 위해서는 comparable 인터페이스에 대해 알면 좋다. 나는 File 이라는 class를 만들어 comparable 인터페이스를 implements 하게 하였고, compareTo 함수를 오버라이딩하여 문제에 맞게 정렬할 수 있도록 설정하였다.
자세한 내용은 코드를 참고하면 알 수 있다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68  | import java.util.*; class Solution {     public String[] solution(String[] files) {         String[] answer;         ArrayList<File> list = new ArrayList<>();         for(int i=0; i<files.length; i++){             list.add(new File(files[i]));             }         answer = new String[list.size()];         Collections.sort(list);    // 정렬         for(int i=0; i<list.size(); i++){             answer[i] = list.get(i).head + list.get(i).number + list.get(i).tail;         }                 return answer;     }     static class File implements Comparable<File>{         int num;    // 들어온 순서         String head="";         String number="";         String tail="";         /* 생성자-parsing */         File(String str){             int idx=0;             while(true){    // 숫자를 만나면 break                 if(str.charAt(idx)>='0' && str.charAt(idx) <='9') break;                 idx++;             }             this.head = str.substring(0,idx);             String tmp = "";             while(true){                 tmp += str.charAt(idx);                 idx++;                 if(idx >= str.length() || str.charAt(idx) < '0' || str.charAt(idx) >'9') break;             }             this.number = tmp;             if(idx < str.length()){                 this.tail = str.substring(idx);             }         }         @Override         public int compareTo(File o){             /* head 소문자로 변경 */             String str1 = this.head.toLowerCase();             String str2 = o.head.toLowerCase();             if(str1.equals(str2)) {    // head가 같다면                 int num1 = Integer.parseInt(this.number);                 int num2 = Integer.parseInt(o.number);                 if(num1 == num2){    // number가 같다면                     return this.num - o.num; // 들어온 순서대로                 }                 return num1-num2;    // number 순서대로             }             return str1.compareTo(str2);    // head 순서대로         }     } }  | cs | 
결과

반응형
    
    
    
  '알고리즘 문제 해결(PS) > [프로그래머스]' 카테고리의 다른 글
| [프로그래머스] 카카오_문자열 압축 (자바 풀이) (0) | 2022.03.08 | 
|---|---|
| [프로그래머스] 카카오_길찾기 게임 (자바 풀이) (0) | 2022.02.22 | 
| [프로그래머스] 카카오_압축 (자바 풀이) (0) | 2022.02.14 | 
| [프로그래머스] 카카오_방금그곡 (자바 풀이) (0) | 2022.02.14 | 
| [프로그래머스] 카카오_추석 트래픽 (자바 풀이) (0) | 2022.01.25 |