어제의 나보다 성장한 오늘의 나

[프로그래머스][Level2][Java] 파일명정렬 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][Level2][Java] 파일명정렬

NineOne 2020. 12. 22. 23:58

programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

문제풀이

HEAD와 NUMBER의 구분은 숫자가 등장하냐 안 하냐 이기때문에 숫자가 등장하기 전까지 HEAD를 찾는다.

NUMBER또한 숫자말고 다른 문자가 나올때까지 반복하여 찾아준다.

TAIL 같은 경우는 해당 문제에서 필요가 없기때문에 따로 확인하지 않았다.

HEAD와 NUMBER를 다 찾으면 list에 저장해주며 files의 길이만큼 반복하였다.

이제 파일명 정렬을 compareTo 함수로 조건에 맞게 설정하여 Collection.sort() 하였다.

이제 차례대로 꺼내면서 answer 배열에 저장해주고 return 해주면 된다.

코드

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public String[] solution(String[] files) {
        String[] answer = new String[files.length];
        List<Data> list = new ArrayList<>();
        
        //전체 반복
        for(int i=0; i<files.length; i++) {
        	
        	String copy = files[i].toUpperCase();
            int index =0;
            
            //HEAD 찾기
            String head ="";
            while(true){
                if(index == copy.length()) break;
            	if('A'<= copy.charAt(index) && copy.charAt(index) <='Z' || copy.charAt(index) == ' ' || copy.charAt(index) == '-') head+= copy.charAt(index++);
            	else break;
            }
            
            //Number 찾기
            String number ="";
            while(true){
                if(index == copy.length()) break;
            	if('0'<= copy.charAt(index) && copy.charAt(index) <='9') number+= copy.charAt(index++);
            	else break;
            }
            
            list.add(new Data(head, Integer.parseInt(number), files[i]));
        }
        
        Collections.sort(list);
        
        for(int i=0; i<files.length; i++) {
        	answer[i] = list.get(i).fileName;
        	System.out.println(answer[i]);
        }
        
        return answer;
    }
	
	static class Data implements Comparable<Data>{
		String head;
		int number;
		String fileName;
		public Data(String head, int number, String fileName) {
			super();
			this.head = head;
			this.number = number;
			this.fileName = fileName;
		}
		@Override
		public int compareTo(Data o) {
			if(this.head.equals(o.head)) return this.number - o.number;
			return this.head.compareTo(o.head);
		}
	}
}

 

Comments