[프로그래머스] 파일명 정렬
문제
단순한 문자 코드 순이 아닌, 파일명에 포함된 숫자를 반영한 정렬 기능을 저장소 관리 프로그램에 구현하기로 했다.
- 파일명은 크게 HEAD, NUMBER, TAIL의 세 부분으로 구성된다.
- HEAD: 숫자가 아닌 문자로 이루어져 있으며, 최소한 한 글자 이상이다.
- NUMBER: 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다.
0
부터99999
사이의 숫자로,00000
이나0101
등도 가능하다. - TAIL: 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다.
- 파일명 정렬
- 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다.
- 그 다음 NUMBER의 숫자로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다.
- HEAD와 NUMBER가 같을 경우, 원래 입력에 주어진 순서를 유지한다.
입력형식
입력으로 배열 files
가 주어진다.
files
는 1000개 이하의 파일명을 포함하는 문자열 배열이다.- 각 파일명은 100 글자 이하 길이로, 영문 대소문자, 숫자, 공백(""), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
- 중복된 파일명은 없으나, 대소문자나 숫자 앞부분의 0 차이가 있는 경우는 함께 주어질 수 있다. (
muzi1.txt
,MUZI1.txt
,muzi001.txt
,muzi1.TXT
는 함께 입력으로 주어질 수 있다.)
출력형식
위 기준에 따라 정렬된 배열을 출력한다.
코드
def solution(files):
answer = []
for file in files:
answer.append([file, getData(file)])
answer.sort(key = lambda x : (x[1][0],x[1][1]))
return [x[0] for x in answer]
def getData(file):
result, i = [], 0
for index, w in enumerate(file):
if '0'<=w<='9' and len(result) == 0:
result.append(file[:index].lower())
i = index
elif not '0'<=w<='9' and len(result) == 1:
result.append(int(file[i:index]))
i = index
break
if len(result) == 1:
result.append(int(file[i:]))
return result
Author And Source
이 문제에 관하여([프로그래머스] 파일명 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@haman/프로그래머스-파일명-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)