프로그래머스 level2 ) [3차] 파일명 정렬

하우르·2021년 7월 6일
0

[3차] 파일명 정렬

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Solution {
   	static class File  implements Comparable<File>{
		String head, tail;
		String number;

		File(String str) {
			int num_index=0;
			for (int i = 0; i < str.length(); i++) {
				if (Character.isDigit(str.charAt(i))) {
					this.head = str.substring(0,i);
					num_index=i;
					break;
				}
			}
			for (int i = num_index; i < str.length(); i++) {
				if(i-num_index>=5 || !Character.isDigit(str.charAt(i)))
				{
					this.number = str.substring(num_index,i) ;
                    this.tail = str.substring(i, str.length());
					break;
				}
				if(i==str.length()-1)
				{
					this.number = str.substring(num_index,i+1);
					this.tail = "";
				}

			}
			
		}
		@Override
		public int compareTo(File f) {
			if (this.head.toLowerCase().compareTo(f.head.toLowerCase())<0) {
				return -1;
			} else if(this.head.toLowerCase().compareTo(f.head.toLowerCase())== 0) {
				if(Integer.parseInt(this.number)<Integer.parseInt(f.number))
					return -1;
				else
					return 1;
			}
			else
				return 1;
		}
	}
    public String[] solution(String[] files) {
        ArrayList<File> file_list = new ArrayList<File>();
		for (String s : files) {
			file_list.add(new File(s));
		}
		Collections.sort(file_list, new Comparator<File>() {
			@Override
			public int compare(File s1, File s2) {
				return s1.compareTo(s2);
			}
		});
		 String[] answer = new String[files.length];
		for (int i = 0; i < answer.length; i++) {
			answer[i] =file_list.get(i).head+file_list.get(i).number+file_list.get(i).tail;
		}
        return answer;
    }
}

대체 왜 반이 틀리는 거냐고고고ㅗㅗㅗ

-->해결했음
stable한 정렬이라고 생각했는데
아니였나봄.
index로 정렬도 해줘야했다

profile
주니어 개발자

0개의 댓글