728x90

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

출처 : 프로그래머스

 

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

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

programmers.co.kr


코드

def solution(files):
    answer = []
    for file in files:
        flag = False
        head = ''
        number = ''
        tail = ''
        for i in range(len(file)):
            if file[i].isdigit():
                number += file[i]
                flag = True
            elif flag == False:
                head += file[i]
            elif flag == True:
                tail = file[i:]
                break
        answer.append([head, number, tail])
        
    answer.sort(key = lambda x: (x[0].upper(), int(x[1])))
    return [''.join(t) for t in answer]

풀이

파일명을 head, number, tail 세가지 부분으로 분류를 한 후 정렬비교 해야한다.

숫자가 나오기 전까지가 head 이고 숫자가 끝나면 tail이다.

이 때, tail 이 없을 수도 있다.

그래서 head와 number + tail 을 크게 비교하고 숫자면 flag를 True 로 체크해준다.

그 후, tail에 넣어준다. 

정렬할 때, tail은 입력순으로 들어가기 때문에 나중에 sort 하면 되니 큰 상관은 없다.

 

이제 최종 sort를 하는데, head가 대소문자가 구분 없으니, upper()로 대문자로 비교한다.

sort의 우선순위는 head, 그 다음이 number 다.

그렇게 정렬 해주고, 구분한 head, number, tail을 다시 합치면 된다.

 

+ Recent posts