알고리즘 문제 풀이/Programmers

[22회차] 파일명 정렬

중앙백 2022. 1. 11. 14:20

Programmers Level.2 파일명 정렬

def solution(files):
    word_list = [['',0,''] for _ in range(len(files))] # HEAD, NUMBER, ORIGINAL WORD로 나누어 저장
    for num, file in enumerate(files):
        head = -1
        number = len(file)
        for a, b in enumerate(file):
            if b.isdigit() and head == -1:
                head = a
            if head != -1 and not b.isdigit() and number == len(file):
                number = a
        word_list[num] = [file[:head].upper(), int(file[head:number]), file] 
        
    word_list = sorted(word_list, key = lambda x : (x[0], x[1])) # HEAD, NUMBER 우선순위로 정렬
    
    answer = []
    for i in word_list:
        answer.append(i[2]) # 정렬된 순서대로 ORIGINAL WORD를 출력
    return answer

 - 문자열을 HEAD, NUMBER, ORIGINAL WORD로 분리시켜 word_list에 저장한다.

 - 그 후 HEAD, NUMBER 순으로 정렬한다. (다중조건으로 정렬)

 - HEAD는 대소문자 구분을 하지 않기 때문에 upper() 후에 정렬.

 - NUMBER는 int형으로 바꿔준 후 정렬