프로그래머스 lv2 파일명 정렬

namkun·2023년 2월 13일
0

코딩테스트

목록 보기
69/79
post-custom-banner

문제 링크

파일명 정렬

풀이

꽤 무식하게 풀었다(?)

객체를 따로 생성해서 이를 통해서 List의 정렬을 사용했다.

위에서 단순하게 캐릭터로 head, number, tail을 잘라냈는데, 이를 regex와 matcher를 사용해서 한 사람도 있던데...다음에는 사용해봐야겠다.

import java.util.*;

class Solution {
    public String[] solution(String[] files) {
        String[] answer = {};

        // 파일명을 3등분해서 3번 정렬을 해야 한다.
        // 알파벳 대문자 / 소문자는 차이 없음.
        List<FileName> fileList = new ArrayList<>();

        for (String file : files) {
            // 숫자가 나오기 전까지 카운팅
            StringBuilder stringBuilder = new StringBuilder();
            int memNum = 0;
            for (int i = 0; i < file.length(); i++) {
                if (Character.isDigit(file.charAt(i))) {
                    memNum = i;
                    break;
                }

                stringBuilder.append(file.charAt(i));
            }
            String head = stringBuilder.toString();

            stringBuilder = new StringBuilder();
            for (int i = memNum; i < file.length(); i++) {
                if (!Character.isDigit(file.charAt(i))) {
                    memNum = i;
                    break;
                }
                stringBuilder.append(file.charAt(i));
            }

            int number = Integer.parseInt(stringBuilder.toString());
            fileList.add(new FileName(file, head, number));
        }

        answer = fileList.stream()
                .sorted(Comparator.comparing(
                        (FileName fileName) -> fileName.getHead().toLowerCase())
                        .thenComparing(FileName::getNumber))
                .map(FileName::getFileName).toArray(String[]::new);

        return answer;
    }
}

class FileName {
    private final String fileName;
    private final String head;
    private final int number;

    public FileName(String fileName, String head, int number) {
        this.fileName = fileName;
        this.head = head;
        this.number = number;
    }

    public String getFileName() {
        return fileName;
    }

    public String getHead() {
        return head;
    }

    public int getNumber() {
        return number;
    }
}
profile
개발하는 중국학과 사람
post-custom-banner

0개의 댓글