프로그래머스 - [3차] 파일명 정렬 (Python)

조민수·2024년 2월 1일
0

Programmers

목록 보기
10/87
post-custom-banner

Lv2, 문자열, 2018 KAKAO BLIND


문제 설명

( 중요 부분만 )
파일명을 세 부분으로 나눈 후, 다음 기준에 따라 파일명을 정렬한다.

  • 파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다. MUZI와 muzi, MuZi는 정렬 시에 같은 순서로 취급된다.
  • 파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
  • 두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다. MUZI01.zip과 muzi1.png가 입력으로 들어오면, 정렬 후에도 입력 시 주어진 두 파일의 순서가 바뀌어서는 안 된다.

입출력 예시

입력: ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
출력: ["img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"]


풀이

  1. 정규식(regex) = r"\d+" 를 통해 숫자를 찾는다.
  2. 입력 순서 체크를 위해 idx 딕셔너리를 만들어 입력 순서를 저장한다.
  3. 주어진 순서대로 정렬하면 끝
import re

def solution(files):
    pattern = r"\d+"
    idx = {}
    for i in range(len(files)):
        idx[files[i]] = i
    
    files.sort( key = lambda x : (x[:x.find(re.findall(pattern,x)[0])].lower(),int(re.findall(pattern,x)[0]), idx[x]))
    return files

순서를 제시해 준 그대로 lambda 함수 속에 넣으면 해결이 됐던 문제

profile
사람을 좋아하는 Front-End 개발자
post-custom-banner

0개의 댓글