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

nnm·2020년 4월 19일
0

프로그래머스 파일명 정렬

문제풀이

지문에서 요구하는 정렬 기준에 따라서 정렬을 해주면 되는 문제다. Java의 경우에는 Comparator를 잘사용할 줄 알아야 풀 수 있는 문제였다.

  • 주어진 파일명을 HEAD, NUMBER, TAIL로 분리한다.
    • 이 때 HEAD는 대소문자를 구분하지 않기 때문에 toLowerCase() 또는 toUpperCase()로 소문자, 또는 대문자로 통일해준다.
  • HEAD 기분으로 문자열 오름차순 정렬을 수행한다.
  • HEAD가 같을 경우 NUMBERINT형으로 변환하여 비교한다.
    • NUMBER가 같은 경우에는 0을 반환하게 되어 원래의 순서를 지킨다.

구현코드

import java.util.*;

class Solution {
	public String[] solution(String[] files) {
    		Arrays.sort(files, new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				String[] file1 = detach(s1);
				String[] file2 = detach(s2);
				
				int headValue = file1[0].compareTo(file2[0]);
				
				if(headValue == 0) {
					int num1 = Integer.parseInt(file1[1]);
					int num2 = Integer.parseInt(file2[1]);
					
					return num1 - num2;
				} else {
					return headValue;
				}
			}
			
			private String[] detach(String str) {
				String head = "";
				String number = "";
				String tail = "";

				int idx = 0;
				for( ; idx < str.length() ; ++idx) {
					char ch = str.charAt(idx);
					if(ch >= '0' && ch <= '9') break;
					head += ch;
				}
				
				for( ; idx < str.length() ; ++idx) {
					char ch = str.charAt(idx);
					if(!(ch >= '0' && ch <= '9')) break;
					number += ch;
				}
				
				for( ; idx < str.length() ; ++idx) {
					char ch = str.charAt(idx);
					tail += ch;
				}
				
				String[] file = {head.toLowerCase(), number, tail};
				
				return file;
			}
		});
		return files;
	}
}
profile
그냥 개발자

0개의 댓글