만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[java] 파일명 정렬

D36choi 2022. 4. 29. 17:40
728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/17686?language=java 

 

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

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

programmers.co.kr

내 풀이

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Solution {

    class Record {

        public String name;
        public String head;
        public int number;

        public Record(String name, String head, int number) {
            this.name = name;
            this.head = head;
            this.number = number;
        }
    }
    public String[] solution(String[] files) {
        List<Record> records = new ArrayList<>();


        for (String file : files) {
            final String number = getNumber(file);
            records.add(new Record(file, file.split(number)[0].toLowerCase(), Integer.parseInt(number)));
        }

        records.sort((a,b) -> {
            if (a.head.equals(b.head)) {
                return Integer.compare(a.number, b.number);
            }
            return a.head.compareTo(b.head);
        });

        return records.stream().map(e -> e.name).toArray(String[]::new);
    }

    private String getNumber(String file) {

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

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

알게 된 것

  • 문자열 내 첫번째 숫자형태 문자열을 찾는 방법
    private String getNumber(String file) {

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

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

이 때, 숫자 형태 문자열을 모두 가져오고 싶다면 if (matcher.find()) -> while (matcher.find()) 로 바꿔주면 된다.

 

 

피드백

다른 풀이보다 오히려 깔끔한거 같아서 만족 중.

다만 스택오버플로우를 참조했기 때문에 구글링 불가한 코테였으면 많이 해맸을 듯 싶다.

pattern, matcher 를 활용한 패턴 매칭 문자열 추출을 외워두도록 하자.

 

'프로그래밍 > programmers&bj' 카테고리의 다른 글

[JAVA] 보석 쇼핑  (0) 2022.05.17
[JAVA] 길 찾기 게임  (0) 2022.04.12
[JAVA] 다단계 칫솔 판매  (0) 2022.03.28
[python] k진수에서 소수 개수 구하기  (0) 2022.03.22
[JAVA] 뉴스 클러스터링  (0) 2022.03.18