본문 바로가기
코딩테스트

[파이썬] 파일명 정렬 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #43]

by ALTERww 2022. 8. 6.
320x100

https://school.programmers.co.kr/learn/courses/30/lessons/17686

 

 

 

리스트를 만드는 건 어렵지 않지만 정렬 방식이 조금 까다로웠다.

정렬할 때 HEAD 기준, HEAD가 같으면 NUMBER 기준으로 정렬하는데 다짜고짜 HEAD -> NUMBER 순으로 정렬하면 HEAD로 정렬한 정보가 사라지고, 역순으로 해도 대부분 케이스에서 실패한다.

그런데 파이썬에서 sorted 함수를 쓸 때, key를 지정할 때 (key1, key2) 이런 식으로 key1으로 우선 정렬하고, 정렬을 유지하면서 key2로 정렬이 가능하더라. 지식이 늘었다.

  • sorted(LIST, key = lambda x : (x[1], x[2]))

 

def solution(files):
    answer = []    
    new_files = []  # 내부의 각 파일에 ['원본', HEAD, NUMBER]로 구분하여 저장. TAIL은 사용되지 않으니 버림
    # new_files 리스트 만들기
    for file in files:
        origin = file
        HEAD, NUMBER = '', ''
        
        # HEAD
        for alpha in file:
            if alpha.isdigit():
                break
            else:
                HEAD += alpha
        # file 자르기        
        file = file[len(HEAD):]
        
        # NUMBER
        idx = 0
        for alpha in file:
            if idx < 5 and alpha.isdigit():
                NUMBER += alpha
                idx += 1
            else:
                break
        new_files.append([origin, HEAD.lower(), int(NUMBER)]) # 대소문자 구분 X, lstrip('0')으로 앞의 0 제거
        
    # HEAD 먼저, 다음 NUMBER 기준 정렬
    SORTED = sorted(new_files, key = lambda x : (x[1], x[2]))
    
    for name in SORTED:
        answer.append(name[0])
    return answer

댓글