📍 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/17686
💡 접근
문자열 관련 문제 였다.
1. HEAD, NUMBER, TAIL 부분을 알맞게 파싱한다.
2. 원본 파일명을 그대로 출력해야 하니 File 클래스를 따로 만들어서 원본 데이터를 저장한다.
3. Comparable을 구현해서 주어진 정렬에 맞게 구현한다.
👩💻 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public String[] solution(String[] files) {
String[] answer = {};
ArrayList<File> list = new ArrayList<File>();
String s = ".- ";
for(String file : files) {
//NUMBER의 시작과 끝 idx를 기억하여 파싱
int start = 0, end = 0;
char[] ch = file.toCharArray();
boolean flag = false;
for(int i = 0; i < ch.length; i++) {
//숫자 확인
if(Character.isDigit(ch[i]) && !flag) {
start = i;
flag = true;
}
//문자 확인
else if((Character.isLetter(ch[i]) && flag) || (s.contains(ch[i]+"") && flag)) {
end = i;
break;
}
}
String number = "", tail = "";
String head = file.substring(0, start);
if(end != 0) number = file.substring(start, end);
else number = file.substring(start);
if(end != 0) tail = file.substring(end);
list.add(new File(head, number, tail));
}
Collections.sort(list);
answer = new String[list.size()];
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).head+list.get(i).number+list.get(i).tail;
}
System.out.println(Arrays.toString(answer));
return answer;
}
private class File implements Comparable<File> {
private String head;
private String number;
private String tail;
public File(String head, String number, String tail) {
this.head = head;
this.number = number;
this.tail = tail;
}
@Override
public int compareTo(File o) {
if(o.head.equalsIgnoreCase(this.head) ) {
if(Integer.valueOf(o.number) == Integer.valueOf(this.number)) {
return 0;
} else return Integer.compare(Integer.valueOf(this.number), Integer.parseInt(o.number));
}
return this.head.toLowerCase().compareTo(o.head.toLowerCase());
}
@Override
public String toString() {
return "File{" +
"head='" + head + '\'' +
", number='" + number + '\'' +
", tail='" + tail + '\'' +
'}';
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Main t = new Main();
//String[] s = {"foo9.text", "foo010bar020.zip", "f-15"};
//String[] s = {"img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"};
String[] s = {"F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat", "F-4", "F-5", "-4"};
t.solution(s);
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2018 카카오 블라인드 1차]추석트래픽 (0) | 2022.07.07 |
---|---|
[2022 카카오 블라인드]양궁 대회★ (0) | 2022.07.06 |
[2022 카카오 블라인드]주차 요금 계산 (0) | 2022.05.03 |
[2022 카카오 블라인드]k진수에서 소수 개수 구하기 (0) | 2022.05.03 |
[2018 카카오 블라인드 3차]압축 (0) | 2022.04.14 |