[JAVA 문제 풀이] 348. 파일명 정렬

프로그래머스 (17686)
Stupefyee's avatar
Jun 27, 2025
[JAVA 문제 풀이] 348. 파일명 정렬
notion image
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public String[] solution(String[] files) { Arrays.sort(files, new Comparator<String>() { public int compare(String f1, String f2) { String[] parts1 = splitFile(f1); String[] parts2 = splitFile(f2); // HEAD 비교 (대소문자 무시) int headCompare = parts1[0].toLowerCase().compareTo(parts2[0].toLowerCase()); if (headCompare != 0) return headCompare; // NUMBER 비교 (정수로 변환) int num1 = Integer.parseInt(parts1[1]); int num2 = Integer.parseInt(parts2[1]); return Integer.compare(num1, num2); } }); return files; } // 파일명을 HEAD, NUMBER, TAIL로 나누는 메서드 private String[] splitFile(String file) { int idx = 0; int len = file.length(); // HEAD 추출 while (idx < len && !Character.isDigit(file.charAt(idx))) idx++; String head = file.substring(0, idx); // NUMBER 추출 (최대 5자리) int numStart = idx; while (idx < len && Character.isDigit(file.charAt(idx)) && idx - numStart < 5) idx++; String number = file.substring(numStart, idx); // TAIL은 필요 없음 return new String[] { head, number }; } }
 

다른 사람의 코드

import java.util.*; import java.util.regex.*; class Solution { public String[] solution(String[] files) { // 정규식을 활용하여 파일명과 숫자를 분리 Pattern p = Pattern.compile("([a-z\\s.-]+)([0-9]{1,5})"); Arrays.sort(files, new Comparator<String>() { @Override public int compare(String s1, String s2) { Matcher m1 = p.matcher(s1.toLowerCase()); Matcher m2 = p.matcher(s2.toLowerCase()); m1.find(); m2.find(); // 파일명 비교 if(!m1.group(1).equals(m2.group(1))) { return m1.group(1).compareTo(m2.group(1)); } else { // 숫자 비교 return Integer.parseInt(m1.group(2)) - Integer.parseInt(m2.group(2)); } } }); return files; } }
 
Share article

stupefyee