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 |