마트철수
[51] 코딩테스트: 파일명 정렬 자바 풀이 본문
코딩테스트 준비 51일차
오늘 풀 문제는 파일명 정렬이다.
파일명 정리는 구글링해서 풀이를 완료했다.
그 이유는.. 정렬하는 람다를 잘 모르겠다 아직두ㅜ
▼ 아래 정리해둔 포스팅 함께 첨부하겠다.
2024.12.26 - [개인공부/IT 지식] - [Arrays.sort] 배열 정렬하기: Comparator와 Lambda 활용
파일명 정리
- 정렬 지정
- Arrays.sort(files, (o1, o2) ->{ ...
- head, number에 따라 정렬이 달라지도록
- 리턴값
- return new String[]{head, number};
- 새로 배운 메서드
- 대소문자 상관없이 비교: int h = a[0].compareToIgnoreCase(b[0]);
- 숫자인지 아닌지: !Character.isDigit(s.charAt(i))


프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
최종 코드
import java.util.*;
class Solution {
public String[] solution(String[] files) {
Arrays.sort(files, (o1, o2) ->{
String[] a = count(o1);
String[] b = count(o2);
//head 비교
int h = a[0].compareToIgnoreCase(b[0]);
if(h!=0){
return h;
}
//number 비교
int n1 = Integer.parseInt(a[1]);
int n2 = Integer.parseInt(b[1]);
if(n2 != n1){
return Integer.compare(n1, n2);
}
return 0;
});
return files;
}
private String[] count(String s){
String head = "";
String number = "";
int i = 0;
while(i < s.length() && !Character.isDigit(s.charAt(i))){
head += s.charAt(i);
i++;
}
while(i < s.length() && Character.isDigit(s.charAt(i))){
number += s.charAt(i);
i++;
}
return new String[]{head, number};
}
}
내가 이해가 어려웠던 부분은 head 비교이다.
//head 비교
int h = a[0].compareToIgnoreCase(b[0]);
if(h!=0){
return h;
}
만약 head만 대소문자 상관없이 비교했을 때,
같지 않으면 h가 -1 return 되었을 거다.
그러면 if문 조건에 들어가니깐 h return!
그러면 비교 대상도 안되는 것임
'개인공부 > 알고리즘' 카테고리의 다른 글
| [53] 코딩테스트: 2개 이하로 다른 비트, 가장 큰 수 자바 (0) | 2025.01.21 |
|---|---|
| [52] 코딩테스트: 2xn 파일링, 프렌즈4블록(카카오인턴문제) 자바 (2) | 2025.01.20 |
| [50] 코딩테스트: 주차 요금 계산 자바 (2022 KAKAO BLIND RECRUITMENT) (1) | 2025.01.16 |
| [49] 코딩테스트: 택배상자 자바 풀이 (1) | 2025.01.14 |
| [48] 코딩테스트: k진수에서 소수 개수 구하기(long 사용 이유) (0) | 2025.01.13 |