관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 [3차] 파일명 정렬 -정렬- 자바 본문

알고리즘/문자열, 정렬

[알고리즘] 프로그래머스 [3차] 파일명 정렬 -정렬- 자바

막무가내막내 2020. 10. 12. 14:20
728x90

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

 

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

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

programmers.co.kr

 

 

 

 

Tail은 비교하지 않는거에 주의해야한다.... 이걸로 삽질 엄청네여

문제를 제데로 읽는 습관을 길러야겠습니다. 

 

풀이 

[Java]

import java.util.Arrays;

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.solution(new String[]{"img12.png", "img10.png", "img02.png", "img1.png", "IMG01000000.GIF", "img2.JPG"});
    }

    public String[] solution(String[] files) {
        Arrays.sort(files, (o1, o2) -> {
            String head1 = o1.split("[0-9]")[0].toLowerCase(); // head - number, tail 분리
            String head2 = o2.split("[0-9]")[0].toLowerCase();
            if (head1.compareTo(head2) == 0) { // head 같은문자열인 경우
                String numTail1 = o1.substring(head1.length()); // number,tail 남김
                String numTail2 = o2.substring(head2.length());
                return Integer.parseInt(calNumber(numTail1)) - Integer.parseInt(calNumber(numTail2));
            } else {
                return head1.compareTo(head2);
            }
        });
        return files;
    }

    private static String calNumber(String numTail2) { //최대 5자리인 number 계산
        StringBuilder sb2 = new StringBuilder();
        for (char c : numTail2.toCharArray()) {
            if (Character.isDigit(c) && sb2.length() <= 5) {
                sb2.append(c);
            } else {
                return sb2.toString();
            }
        }
        return sb2.toString();
    }
}

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다 .!

728x90
Comments