[프로그래머스] lv2 - 파일명 정렬 (파이썬)

thousand_yj·2023년 6월 15일
0

문제풀이

목록 보기
1/3

문제 링크

기록할만한 내용

문자열을 원하는 단위로 잘라서 비교할 수 있어야 하는 문제였다. 파이썬은 sort()함수가 있어서 진짜 편리하다고 다시한번 느꼈다.
sort() 함수 내에서 대소문자를 무시하고 정렬하는 방법은 str.lower()요소를 key 값으로 전달해주면 된다.
현재 문제에서는 HEAD 내에서는 대소문자를 무시하고 정렬하고, 만약 동일한 경우 NUMBER 비교하여 정렬해야 되므로 두 개의 인자를 기준으로 정렬해야 한다. 따라서 lambda 문법을 사용하여 정렬했다.

다만 람다 문법에서 주의할 것이 하나 있다.

arr.sort(key = lambda x : (x[0], x[1]))

에서 lambda x : (x[0], x[1]) 이 부분의 괄호를 생략할 시 문법 에러가 난다. 주의!

소요 시간 : 30분

통과 코드

def solution(files):
    answer = []
    arr = [["", "", ""] for _ in range(len(files))]

    for i in range(len(files)):
        headEnd = False
        numEnd = False
        for j, f in enumerate(files[i]):
            if (not headEnd and not numEnd) and not (48 <= ord(f) <= 57):
                arr[i][0] += f
            elif (not numEnd) and 48 <= ord(f) <= 57:
                arr[i][1] += f
                headEnd = True
            else:
                numEnd = True
                arr[i][2] += files[i][j:]
                break
    arr.sort(key=lambda x: (x[0].lower(), int(x[1])))
    for item in arr:
        answer.append("".join(map(str, item)))
    return answer
profile
함께 일하고 싶은 개발자가 되기 위해 노력합니다. 코딩테스트 관련 공부 및 이야기는 티스토리에도 업로드되어 있습니다.

0개의 댓글