출처 : https://school.programmers.co.kr/learn/courses/30/lessons/17686#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public String[] solution(String[] files) {
String[] answer = new String[files.length];
//헤드 숫자 꼬리 나눌 배열
String split[][]= new String[files.length][3];
for(int i=0;i<files.length;i++){
int start=0;
int end=0;
for(int j=0;j<files[i].length();j++){
//처음으로 숫자가 시작되는 index 찾기 start에 저장
if(Character.isDigit(files[i].charAt(j))){
start=j;
break;
}
}
//숫자가 끝나는 인덱스 찾기
for(int k=start;k<files[i].length();k++){
//숫자 시작점이 길이의 끝이라면 예외처리
if(start==files[i].length()-1){
end=100000;
break;
}
//문자가 나오면 end에 저장
if(!Character.isDigit(files[i].charAt(k))){
end=k;
//숫자의 최대 길이 5를 넘으면 잘라주기
if(end-start>6)end=start+5;
break;
}
//길이의 끝까지 갔을 때 숫자라면 예외처리
else if(k==files[i].length()-1&&Character.isDigit(files[i].charAt(k))){
end=100000;
}
}
//꼬리가 존재하지 않음
if(end==100000){
split[i][0]=files[i].substring(0,start);
split[i][1]=files[i].substring(start);
split[i][2]="";
}
else{
split[i][0]=files[i].substring(0,start);
split[i][1]=files[i].substring(start,end);
split[i][2]=files[i].substring(end);
}
}
//compareToIgnoreCase는 대소문자 구분없이 비교
//헤드비교로 정렬
Arrays.sort(split,new Comparator<String[]>(){
public int compare(String [] o1, String [] o2){
return o1[0].compareToIgnoreCase(o2[0]);
}
});
//헤드가 같을 때 오름차순 정렬
Arrays.sort(split,new Comparator<String[]>(){
public int compare(String [] o1, String [] o2){
if(o1[0].compareToIgnoreCase(o2[0])==0){
return Integer.parseInt(o1[1])-Integer.parseInt(o2[1]);
}
else return 0;
}
});
for(int i=0;i<answer.length;i++){
answer[i]=split[i][0]+split[i][1]+split[i][2];
}
return answer;
}
}
'알고리즘 > Lv2. 프로그래머스' 카테고리의 다른 글
[프로그래머스] 프렌즈4블록 -java (0) | 2023.08.11 |
---|---|
기능개발 (0) | 2023.08.11 |
[프로그래머스] 스킬트리 - java (0) | 2023.07.28 |
[프로그래머스] 주식가격 - java (0) | 2023.07.25 |
[프로그래머스] [3차] n진수 게임 - java (0) | 2023.07.25 |