[프로그래머스] LV.2 [3차] 파일명 정렬

 

1. 문제 : Link

파일명 정렬하기

 

2. 풀이

lamda활용

 

3. 코드

def solution(files):
    answer = []
    real = []
    for j in range(len(files)):
        s = ''
        tmp = []
        file = files[j]
        H = False
        for i in range(len(file)):
            f = file[i]
            if H == False:
                if f.isnumeric() == False:
                    if f.isalpha():
                        s += f.lower()
                    else:
                        s += f
                else:
                    tmp.append(s)
                    s = ''
                    H = True
            if H == True:
                if f.isnumeric() == True:
                    s += f
                    if i == len(file)-1:
                        tmp.append(int(s))
                        break
                else:
                    tmp.append(int(s))
                    break
        tmp.append(j)
        answer.append(tmp)
    answer = sorted(answer, key = lambda x : (x[0], x[1]))
    for an in answer:
        real.append(files[an[2]])
    return real
import java.util.*;

class Solution {
  public String[] solution(String[] files) {

		Arrays.sort(files, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				
				String h1 = o1.split("[0-9]")[0];
				String h2 = o2.split("[0-9]")[0];
				
				int result = h1.toLowerCase().compareTo(h2.toLowerCase());

				if ( result == 0 ) {					
					// 문자열이 같은 경우 숫자를 비교한다.
					result = findNum(o1,h1)-findNum(o2,h2);
				}
				return result;
			}
		});
		return files;
  }
    
 private int findNum( String s, String h ) {		
		s = s.replace(h, "");		
		String result ="";		
		for( char c : s.toCharArray()) {
			if( Character.isDigit(c) && result.length() < 5 ) {
				result+=c;
			}else
				break;
		}
		return Integer.valueOf(result);
	}    
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기