[3차] 파일명 정렬(Lv2)
https://school.programmers.co.kr/learn/courses/30/lessons/17686
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
이번 문제는 우선순위 큐를 이용해서 풀었다.
먼저, 대소문자 구분 없이 우선순위가 결정되므로, arr 배열을 만들어서 files 배열을 복사한 후 toUpperCase를 이용해서 모두 대문자로 만들었다.
이후, 우선순위 큐를 람다식을 이용해 head 기준, number 기준, idx 기준으로 설정했다.
다음으로 head와 number를 찾았다. 첫 단어는 무조건 문자이고, 중간에 숫자 하나가 반드시 포함되므로, head는 숫자가 나오기 전까지다. 이후 숫자가 나오면, 숫자 부분의 인덱스를 기록해서 그 곳부터 시작하도록 했다.
for(int j=0; j<arr[i].length(); j++){
if(arr[i].charAt(j)-'0'<0 || arr[i].charAt(j)-'0'>9) head+=arr[i].charAt(j);
else {
numberStart = j;
break;
}
}
number는 숫자가 아닌 문자가 나오면 break하도록 했고, number를 구한 후에는 int로 변환해서 head, idx와 함께 우선순위 큐에 넣었다.
String number = "";
for(int j=numberStart; j<arr[i].length(); j++){
if(arr[i].charAt(j)-'0'>=0 && arr[i].charAt(j)-'0'<=9) number+=arr[i].charAt(j);
else break;
}
int num = Integer.parseInt(number);
pq.offer(new file(i,head,num));
마지막으로 answer 배열에 순차적으로 담아서 return 하도록 했다.
전체 Code
import java.util.*;
class Solution {
public String[] solution(String[] files) {
String[] arr = files.clone();
for(int i=0; i<arr.length; i++){
arr[i] = arr[i].toUpperCase();
}
PriorityQueue<file> pq = new PriorityQueue<>((o1,o2)->{
if(!o1.head.equals(o2.head)) return o1.head.compareTo(o2.head);
else if(o1.number != o2.number) return o1.number-o2.number;
return o1.idx-o2.idx;
});
for(int i=0; i<arr.length; i++){
String head = "";
int numberStart = 0;
for(int j=0; j<arr[i].length(); j++){
if(arr[i].charAt(j)-'0'<0 || arr[i].charAt(j)-'0'>9) head+=arr[i].charAt(j);
else {
numberStart = j;
break;
}
}
String number = "";
for(int j=numberStart; j<arr[i].length(); j++){
if(arr[i].charAt(j)-'0'>=0 && arr[i].charAt(j)-'0'<=9) number+=arr[i].charAt(j);
else break;
}
int num = Integer.parseInt(number);
pq.offer(new file(i,head,num));
}
String[] answer = new String[files.length];
int idx=0;
while(!pq.isEmpty()){
answer[idx++] = files[pq.poll().idx];
}
return answer;
}
private class file{
int idx;
String head;
int number;
public file(int idx, String head, int number){
this.idx=idx;
this.head=head;
this.number=number;
}
}
}'알고리즘' 카테고리의 다른 글
| [프로그래머스] [1차] 프렌즈4블록 - Java (0) | 2024.11.20 |
|---|---|
| [프로그래머스] 2 X n 타일링 - Java (0) | 2024.11.18 |
| [프로그래머스] 숫자 변환하기 - Java (1) | 2024.11.16 |
| [프로그래머스] 오픈채팅방 - Java (1) | 2024.11.15 |
| [프로그래머스] 더 맵게 - Java (0) | 2024.11.14 |