[java] [프로그래머스] 17686 파일명 정렬(2018 카카오 블라인드)

오영선·2022년 12월 27일
0
post-custom-banner
import java.util.Arrays;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Solution {
    public String[] solution(String[] files) {
        String[][] parse = split(files);
        sort(parse);
        String[] answer = merge(parse);
        return answer;
    }

    private String[] merge(String[][] parse) {
        String[] temp = new String[parse.length];
        for (int i = 0; i < parse.length; i++) {
            temp[i] = parse[i][2];
        }
        return temp;
    }

    private String[][] split(String[] files) {
        String[][] parse = new String[files.length][3];
        for (int i = 0; i < files.length; i++) {
            parse[i][1] = getNumber(files[i]);
            String temp[] = files[i].split(parse[i][1]);
            parse[i][0] = temp[0];
            parse[i][2] = files[i];
        }
        return parse;
    }
    private String getNumber(String file) {

        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher matcher = pattern.matcher(file);

        if (matcher.find()) {
            return matcher.group();
        }
        return "";
    }

    public String[][] sort(String[][] files) {

        Arrays.sort(files, Comparator.comparing((String[] o) -> Integer.parseInt(o[1])));
        Arrays.sort(files, Comparator.comparing((String[] o) -> o[0].toLowerCase()));

        return files;
    }

    public static void main(String[] args) {

//        String [][] files = {
//                {"img","12",".png"},
//                {"img","10",".png"},
//                {"img","02",".png"},
//                {"img","1",".PNG"},
//                {"IMG","01",".GIF"},
//                {"img","2",".JPG"}
//        };
//        String [][] files = {
//                {"F-","5", "Freedom Fighter"},
//                {"B-","50", "Superfortress"},
//                {"A-","10", "Thunderbolt II"},
//                {"F-","14" ,"Tomcat"}
//        };
        String files[] = {
              "imG2.png", "img2"
        };
        Solution s = new Solution();
        files = s.solution(files);
        for(int i=0; i<files.length; i++){
            System.out.println(files[i]);
        }

    }
}

어려웠던 점 1

NUMBER를 찾기 위해 [0-9] 정규표현식으로 문자열을 분리했으나 tail이나 두번째로 숫자가 등장하는 경우에 모든 숫자가 분리되었다.

해결방법 : 처음에 등장한 문자열 패턴을 찾아 분리했다.


	parse[i][1] = getNumber(files[i]);

    private String getNumber(String file) {

        Pattern pattern = Pattern.compile("[0-9]+");
        Matcher matcher = pattern.matcher(file);

        if (matcher.find()) {
            return matcher.group();
        }
        return "";
    }

어려웠던점 2

tail이 비어있을 경우를 고려하지 않아서 runtime error가 발생했다.

해결방법 : files[i]의 전체를 따로 저장해주었다.

			parse[i][1] = getNumber(files[i]);
            String temp[] = files[i].split(parse[i][1]);
            parse[i][0] = temp[0];
            parse[i][2] = files[i];
        ```
post-custom-banner

0개의 댓글