[Python] 카카오(2) 파일명정렬
Updated: Categories: Programmershttps://programmers.co.kr/learn/courses/30/lessons/17686
아이디어
- 파일명은 HEAD, NUMBER, TAIL 세부분으로 나누어져 있다고 했으므로 주어진 파일명 문자열을 분리해야 합니다.
- 파일명 문자열을 처음으로 숫자가 나오는 지점까지 순회합니다.
- 처음 숫자가 나오는 인덱스를 저장하고, 그 인덱스부터 최대 인덱스+5까지 순회합니다.
- 만약 다섯번을 순회하기 전에 파일명이 끝난다면 그냥 마지막 인덱스를 저장합니다.
- 또, 다시 문자가 등장하면 그 전 인덱스까지 저장합니다.
- 저장된 인덱스를 사용하여 두 부분으로 나눕니다. tail은 정렬에 영향을 주지 않으니 저장하지 않습니다.
- HEAD먼저 정렬 후 NUMBER를 정렬합니다.
알게 된 함수/방법
문자열.isdigit()
: 문자열이 완벽한 숫자형태인지 확인하여 bool값 반환.- sorted의 키값에 두 가지 정렬 조건을 설정할 수 있다.
sorted(리스트, key = lambda x : (x[1], x[2]))
- 숫자 정렬 시 문자열일 땐 1, 10, 2… 순으로 정렬되고 숫자일땐 1, 2, 10… 순으로 정렬된다.
- ‘00005’의 문자열을 int로 형변환하면 5가 된다.
정답 코드
def solution(files):
s_files = []
for f in files:
# head
for j in range(len(f)):
if str(f[j]).isdigit():
start = j
break
# number
for k in range(start, start+5):
end = k+1
if k == len(f)-1:
break
if str(f[k]).isdigit()==0:
end-=1
break
s_files.append([f, f[:j].lower(), int(f[start:end])])
s_files = sorted(s_files, key = lambda x : (x[1], x[2]))
answer=[]
for f in s_files:
answer.append(f[0])
return answer