[프로그래머스 JAVA] 17686. [3차] 파일명 정렬

2026. 4. 27. 15:51·코딩테스트/프로그래머스

문제 링크


 

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

알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려

school.programmers.co.kr

접근 방법


파일명을 HEAD, NUMBER로 나눈 뒤 정렬 기준에 맞게 정렬합니다.

  1. HEAD를 기준으로 사전순 정렬합니다. 이때 대소문자는 구분하지 않습니다.
  2. HEAD가 같다면 NUMBER를 숫자로 변환하여 오름차순 정렬합니다.
  3. HEAD와 NUMBER가 모두 같다면 입력 순서를 유지합니다.

소스 코드


import java.util.*;

class Solution {

    class Node implements Comparable<Node> {
        String head;
        int num;
        int idx;

        public Node(String head, int num, int idx) {
            this.head = head.toLowerCase();
            this.num = num;
            this.idx = idx;
        }

        public int compareTo(Node o) {
            int headCompare = this.head.compareTo(o.head);
            if (headCompare != 0) {
                return headCompare;
            }

            int numCompare = Integer.compare(this.num, o.num);
            if (numCompare != 0) {
                return numCompare;
            }

            return Integer.compare(this.idx, o.idx);
        }
    }

    public String[] solution(String[] files) {
        List<Node> arr = new ArrayList<>();

        for (int i = 0; i < files.length; i++) {
            int startIdx = 0;

            while (!Character.isDigit(files[i].charAt(startIdx))) {
                startIdx++;
            }

            int endIdx = startIdx;

            while (
                endIdx < files[i].length()
                && Character.isDigit(files[i].charAt(endIdx))
                && endIdx - startIdx < 5
            ) {
                endIdx++;
            }

            String head = files[i].substring(0, startIdx);
            int num = Integer.parseInt(files[i].substring(startIdx, endIdx));

            arr.add(new Node(head, num, i));
        }

        Collections.sort(arr);

        String[] answer = new String[files.length];

        for (int i = 0; i < files.length; i++) {
            Node node = arr.get(i);
            answer[i] = files[node.idx];
        }

        return answer;
    }
}

코드 설명


Node 클래스는 정렬에 필요한 정보를 저장하는 클래스입니다.
head에는 파일명의 HEAD 부분을 소문자로 변환하여 저장합니다. 문제에서 HEAD는 대소문자를 구분하지 않고 비교해야 하기 때문입니다.
num에는 NUMBER 부분을 정수로 변환하여 저장합니다. 숫자 앞의 0은 정렬에 영향을 주지 않기 때문에 Integer.parseInt()를 사용합니다.
idx에는 원래 입력 배열에서의 위치를 저장합니다. HEAD와 NUMBER가 모두 같을 때 입력 순서를 유지하기 위해 사용합니다.

파일명을 순회하면서 처음으로 숫자가 등장하는 위치를 찾습니다. 이 위치가 NUMBER의 시작 위치이고, 그 앞부분이 HEAD가 됩니다.

NUMBER는 연속된 숫자이면서 최대 다섯 글자까지 가능하므로, 숫자가 아닌 문자를 만나거나 다섯 자리를 초과하면 탐색을 멈춥니다.

compareTo()에서는 먼저 head를 비교합니다. head가 다르면 사전순으로 정렬합니다.
head가 같으면 num을 비교합니다. num까지 같으면 idx를 비교하여 원래 입력 순서가 유지되도록 합니다.

정렬이 끝난 뒤에는 Node에 저장된 idx를 이용해 원본 files 배열에서 파일명을 꺼내 정답 배열에 저장합니다.

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 JAVA] 150368. 이모티콘 할인행사  (0) 2026.05.08
[프로그래머스 JAVA] 258707. n + 1 카드게임  (0) 2026.05.02
[프로그래머스 JAVA] 68936. 쿼드압축 후 개수 세기  (0) 2026.04.23
[프로그래머스 SQL] 301649. 대장균 크기에 따라 분류하기 2  (0) 2026.04.09
[프로그래머스 SQL] 131114. 경기도에 위치한 식품창고 목록 출력하기  (0) 2026.04.07
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 JAVA] 150368. 이모티콘 할인행사
  • [프로그래머스 JAVA] 258707. n + 1 카드게임
  • [프로그래머스 JAVA] 68936. 쿼드압축 후 개수 세기
  • [프로그래머스 SQL] 301649. 대장균 크기에 따라 분류하기 2
tkxx_ls
tkxx_ls
  • tkxx_ls
    tkxx_ls Story
    tkxx_ls
  • 전체
    오늘
    어제
    • 분류 전체보기 (117) N
      • 코딩테스트 (56) N
        • 백준 (40)
        • 프로그래머스 (16) N
      • 42Seoul (6)
        • libft (6)
      • Github (1)
      • 환경설정 (1)
        • 기타 (4)
        • c & c++ (3)
      • 잡설 (2)
      • CS (7)
        • 네트워크 (2)
        • 강화 학습 (4)
        • 자료구조 (8)
        • 알고리즘 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    jdk 버전 관리
    programmers
    Baekjoon
    완전탐색
    gradle java 설정
    Gradle 설정
    백준
    BOJ
    분할정복
    build 재현성
    신경망
    Java
    dfs
    인공지능
    cs
    강화학습
    알고리즘
    java tool chain
    문자열 처리
    백트래킹
    프로그래머스
    머신러닝
    브루트포스
    c++
    java 버전 호환성
    gradle
    gradle tool chain
    java build
    구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
tkxx_ls
[프로그래머스 JAVA] 17686. [3차] 파일명 정렬
상단으로

티스토리툴바