ALGORITHM/PROGRAMMERS

[프로그래머스] 파일명 정렬 (2018 KAKAO BLIND RECRUITMENT)

0298 2021. 2. 9. 22:51

programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

2021-02-09


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
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
 
public class Solution17686 {
    public static ArrayList<File> list;
    static class File implements Comparable<File>{
        int idx;
        String head;
        int number;
 
        public File(int idx, String head, int number) {
            this.idx = idx;
            this.head = head;
            this.number = number;
        }
 
        @Override
        public int compareTo(File file) {
            if(this.head.equals(file.head)) {
                if(this.number == file.number) return this.idx - file.idx;
                return this.number - file.number;
            }
 
            return this.head.compareTo(file.head);
        }
    }
    public static String[] solution(String[] files) {
        String[] answer = new String[files.length];
        list = new ArrayList<>();
        for(int i  = 0; i < files.length; i++) {
            boolean flag = false;
            boolean numFlag = false;
            String head = "";
            String num = "";
            for(int j = 0; j < files[i].length(); j++) {
                if(flag && !(0 <= Character.getNumericValue(files[i].charAt(j)) && Character.getNumericValue(files[i].charAt(j)) <= 9)) {
                    numFlag = true;
                } else if(!numFlag && (0 <= Character.getNumericValue(files[i].charAt(j)) && Character.getNumericValue(files[i].charAt(j)) <= 9)) {
                    num += files[i].charAt(j);
                    flag = true;
                } else if(!flag){
                    head += files[i].charAt(j);
                }
            }
            list.add(new File(i, head.toLowerCase(), Integer.parseInt(num)));
        }
        Collections.sort(list);
 
        for(int i = 0; i < list.size(); i++) {
            answer[i] = files[list.get(i).idx];
        }
 
        return answer;
    }
 
    public static void main(String[] args) {
        String s[] = {"img12.png""img10.png""img02.png""img1.png""IMG01.GIF""img2.JPG"};
        System.out.println(Arrays.toString(solution(s)));
    }
}
cs

#문제풀이

 

파일명을 head와 number로 분리시킨 후, 정렬을 해주는 문제이다.