[프로그래머스] LEVEL2 [3차] 파일명 정렬 JAVA

Pixel Dophin·2023년 8월 21일
0

프로그래머스

목록 보기
42/55

[3차] 파일명 정렬

문제링크

풀이

정렬
1. File이라는 클래스를 만든다.
2. Comparable를 활용하여 문제에 적힌 대로 정렬한다.
3. 이후 순서대로 담아준다.

=> 다른 사람의 풀이는 정규표현식을 활용한 풀이로 훨씬 풀이가 간단하였다!

코드

import java.util.*;

class Solution {
    public class File implements Comparable<File>{
        String origin;
        String head;
        String number;
        String tail;
        int idx;
        
        public File (String origin, String head, String number, String tail, int idx) {
            this.origin = origin;
            this.head = head;
            this.number = number;
            this.tail = tail;
            this.idx = idx;
        }
        
        @Override
        public int compareTo(File f) {
            if (!this.head.toLowerCase().equals(f.head.toLowerCase())) {
                return this.head.toLowerCase().compareTo(f.head.toLowerCase());
            }
            
            if (Integer.parseInt(this.number) != Integer.parseInt(f.number)) {
                return Integer.parseInt(this.number) - Integer.parseInt(f.number);
            }
            
            return this.idx - f.idx;
        }
    }
    
    public String[] solution(String[] files) {
        String[] answer = new String[files.length];
        
        List<File> list = new ArrayList<>();
        
        for (int i = 0; i < files.length; i++) {
            int numStart = -1;
            int numEnd = -1;
            for (int j = 1; j < files[i].length(); j++) {
                int charNum = files[i].charAt(j) - '0';
            
                if (0 <= charNum && charNum <= 9) {
                    if (numStart == -1) {
                        numStart = j;
                    }
                    numEnd = j;
                } else {
                    if (numEnd != -1) {
                        break;
                    }
                }
            }
            String head = files[i].substring(0, numStart);
            String number = files[i].substring(numStart, numEnd + 1);
            String tail = files[i].substring(numEnd);
            
            list.add(new File(files[i], head, number, tail, i));
        }
        
        Collections.sort(list);
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i).origin;
        }  
        return answer;
    }
}
profile
안녕 👋 성장하고픈 개발자 💻 입니다

0개의 댓글

관련 채용 정보