https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3

 

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

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

programmers.co.kr



Solution

def solution(files):
    #print(files);
    answer = []
    num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    tmp_result = []
    for f in range(len(files)):
        head, number, tail = '', '', '';
        idx, num_cnt = 0, 0
        for h in range(idx, len(files[f])):
            if files[f][h] in num:
                break
            head += files[f][h]
            idx += 1
        #print(head)
        for n in range(idx, len(files[f])):
            if not files[f][n] in num:
                break
            if len(number) <= 5:
                if files[f][n] in num:
                    number += files[f][n]
                    idx += 1
            else:
                break
        #print(number)
        if idx < len(files[f]):
            for t in range(idx, len(files[f])):
                if files[f][t]:
                    tail += files[f][t]
                else:
                    break
        #print(tail)
        tmp_result.append((head.lower(), int(number), tail, f))
        tmp_result = sorted(tmp_result, key = lambda x:(x[0], x[1]))
    print(tmp_result)
    for i in tmp_result:
        answer.append(files[i[3]])
    return answer

문제 유형: 문자열 / 정렬

files에 주어진 각 file들의 문자열을 앞에서부터 하나씩 검사했다. HEAD는 숫자가 아닌 문자열로만 이루어져 있으므로 첫 숫자가 나올 때 까지의 문자들을 HEAD에 넣는다. NUMBER는 0부터 9까지의 최대 5개의 숫자로 이루어져있다. 그래서 0부터 9까지의 숫자 문자열을 하나 선언 해놓고 길이가 6이 넘지 않을 때 까지 숫자인 문자열을 NUMBER에 넣었다. 마지막 TAIL에는 나머지 문자들을 다 넣으면 된다. HEAD는 대소문자를 구분하지 않으므로 소문자로, NUMBER에서 010과 10은 같은 수로 처리해야 하므로 int로 타입을 바꿔서 처리한다. 


생강강

,