https://school.programmers.co.kr/learn/courses/30/lessons/17686
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
조건
제한시간 : 1시간 이내
이번 문제는 커스텀 정렬문제라고 생각하면 될 것 같다
입력 받는 값이 배열이니 Arrays.sort 를 이용하여 new Comparator 를 이용하면 된다.
Arrays.sort(입력받은배열, new Comparator<String>(){ 배열 커스텀하기 });
문제에서 언급한대로 정렬을 하기 위해선, 파일명을 head, number, tail 로 쪼갠 뒤 작업하면 좋을 거라 생각을 했다.
따라서, 분리 작업을 하는 메서드를 만들어서 분리한 뒤, 한 배열에 담아 넣어서 비교를 했다.
* 코드 작업 중에, StringBuilder 를 이용해서 문자열 처리를 복잡도 낮게 구현을 하고 싶지만 이 부분에서 너무 애를 먹고 StringBuilder 로 구현하지 못했다는 게 아쉬웠다ㅜ 시간제한을 두고 푼 문제라 빠르게 구현 후, 제출했다.
import java.util.*;
class Solution {
public String[] detachFileName (String s) {
String head = "", number = "", tail = "";
StringBuilder sb = new StringBuilder();
boolean flag = false;
int idx = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(Character.isDigit(c)) {
number += c;
flag = true;
}else if (!Character.isDigit(c)){
if(flag) {
idx = i;
break;
}
head += c;
}
}
for (int i = idx; i < s.length(); i++) {
sb.append(i);
}
tail = sb.toString();
String[] files = {head.toLowerCase(), number, tail};
return files;
}
public String[] solution(String[] files) {
String[] answer = {};
Arrays.sort(files, new Comparator<String>() {
public int compare(String o1, String o2) {
String[] files1 = detachFileName(o1);
String[] files2 = detachFileName(o2);
if(files1[0].compareTo(files2[0]) == 0) {
int num1 = Integer.parseInt(files1[1]);
int num2 = Integer.parseInt(files2[1]);
return num1 - num2;
}else {
return files1[0].compareTo(files2[0]);
}
}
});
return files;
}
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 *Java] - 다음 큰 숫자 (0) | 2022.09.06 |
---|---|
[프로그래머스 *Java] - n 진수 게임 (0) | 2022.08.24 |
[프로그래머스 *Java] - 방금 그곡 (0) | 2022.08.19 |
[프로그래머스 *Java] - 점프와 순간이동 (0) | 2022.08.18 |
[프로그래머스 *Java] - 스킬트리 (0) | 2022.08.17 |