파일명 정렬

유태형·2022년 2월 12일
0

문제

문제 분석

HEAD,NUMBER,TAIL로 나누고 HEAD를 비교 후 정렬, 만약 HEAD가 같다면 NUMBER를 비교후 정렬 하는 문제




풀이

잘 정리된 티스토리

https://subin-0320.tistory.com/103
Comparator<E>클래스와 compare메소드 오버라이딩에 대하여 잘 정리된 블로그

정렬 오버라이딩

HEAD부분 대소문자 구분하지 않고 문자열 비교

		//조건에 따른 정렬을 위해 Comparator
        //compare 리턴값이 양수면 자리 바꾸고 0이면 숫자비교
        Arrays.sort(files, new Comparator<String>(){
            public int compare(String o1, String o2){
                //숫자 앞부분을 잘라서 head 생성
                String head1 = o1.split("[0-9]")[0];
                String head2 = o2.split("[0-9]")[0];
                
                //compareTo를 사용한 비교를 위해서는 모두 소문자로 변경 후 비교
                int result = head1.toLowerCase().compareTo(head2.toLowerCase());
                
                if(result == 0){ //같은 문자일 경우 숫자로 비교
                    result = convertNum(o1,head1) - convertNum(o2,head2);
                }
                
                return result;
            }

NUMBER부분 정수 크기 비교

	public static int convertNum(String str, String head){
        str = str.substring(head.length()); //head길이 만큼 잘라서 num부터
        String result = "";
        for(char c: str.toCharArray()){
            if(Character.isDigit(c) && result.length() < 5) //숫자이고 길이가 5이하인지 확인
                result += c;
            else
                break;
        }
        
        return Integer.valueOf(result);
    }



코드

import java.util.*;

class Solution {
    public String[] solution(String[] files) {
        String[] answer = {};
        
        //조건에 따른 정렬을 위해 Comparator
        //compare 리턴값이 양수면 자리 바꾸고 0이면 숫자비교
        Arrays.sort(files, new Comparator<String>(){
            public int compare(String o1, String o2){
                //숫자 앞부분을 잘라서 head 생성
                String head1 = o1.split("[0-9]")[0];
                String head2 = o2.split("[0-9]")[0];
                
                //compareTo를 사용한 비교를 위해서는 모두 소문자로 변경 후 비교
                int result = head1.toLowerCase().compareTo(head2.toLowerCase());
                
                if(result == 0){ //같은 문자일 경우 숫자로 비교
                    result = convertNum(o1,head1) - convertNum(o2,head2);
                }
                
                return result;
            }
        });
        
        
        
        return files;
    }
    
    public static int convertNum(String str, String head){
        str = str.substring(head.length()); //head길이 만큼 잘라서 num부터
        String result = "";
        for(char c: str.toCharArray()){
            if(Character.isDigit(c) && result.length() < 5) //숫자이고 길이가 5이하인지 확인
                result += c;
            else
                break;
        }
        
        return Integer.valueOf(result);
    }
}

알아볼것

Character.isDigit(), Integer.valueOf(), Comparator<E>, compare(String, String)




GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%ED%8C%8C%EC%9D%BC%EB%AA%85%EC%A0%95%EB%A0%AC.java

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보