정렬을 사용했다.
사실 문제에 있는 그대로를 구현하면 됐다. 예제 테스트케이스에 있는 것 중에서 예외가 있을까 생각해봤지만 딱히 예외는 없을 것 같아서 바로 구현했다.
문제에 쓰여진 그대로를 구현했다.
1. 처음으로 숫자로 시작하는 index 를 찾는다. 그 이전 인덱스 까지가 head.
2. 그 후 그 다음 문자부터 처음으로 0~9로 시작하지 않는 index를 찾는다. 그 이전 index 까지가 number. 여기서 010 이 나올 수 있으므로 String 형의 "010" 을 int 의 10 으로 형변환
3. 그리고 head 를 대문자로 바꿔준다. toUpperCase() 메소드 사용
4. 이제 정렬한다. 첫번째로는 head 를, 두번째로는 number 를, 마지막으로는 등장한 순서를 기준으로 정렬한다.
5. 정렬한 결과를 result 배열에 넘겨준다.
import java.util.*;
class Word{
String head;
int number;
String before;
int order;
Word(String head,int number,String before,int order){
this.head=head;
this.number=number;
this.before=before;
this.order=order;
}
}
class Solution {
public String[] solution(String[] files) {
Word word[]=new Word[files.length];
for(int i=0;i<files.length;i++){
String before=files[i];
int index=0;
for(int j=0;j<files[i].length();j++){
if(files[i].charAt(j)>='0'&&files[i].charAt(j)<='9'){
index=j;
break;
}
}
String head=files[i].substring(0,index);
files[i]=files[i].substring(index,files[i].length());
index=files[i].length();
for(int j=0;j<files[i].length();j++){
if(!(files[i].charAt(j)>='0'&&files[i].charAt(j)<='9')){
index=j;
break;
}
}
head=head.toUpperCase();
String num=files[i].substring(0,index);
int number=Integer.parseInt(num);
word[i]=new Word(head,number,before,i);
}
Arrays.sort(word,new Comparator<>(){
@Override
public int compare(Word w1,Word w2){
if(w1.head.compareTo(w2.head)>0){
return 1;
}
else if(w1.head.compareTo(w2.head)==0){
if(w1.number>w2.number)
return 1;
else if(w1.number==w2.number){
if(w1.order>w2.order)
return 1;
}
}
return -1;
}
});
String answer[]=new String[files.length];
for(int i=0;i<answer.length;i++){
answer[i]=word[i].before;
}
return answer;
}
}
크게 어렵지 않았다. 하지만 난이도에 비해서 꽤 시간이 많이 걸렸다. 중간중간 어떤 예외가 있을까 생각하느라 오래 걸린 것 같다. 그리고 테스트케이스 예제가 정확히 주어지지 않아서 좀 헷갈렸던 부분도 있다
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212