https://programmers.co.kr/learn/courses/30/lessons/17686
숫자를 기준으로 파일명을 split해야 한다. 이 때 다음과 같이 직접 구현해도 무방하다.
number_list = [str(i) for i in range(10)]
for idx in range(len(files)):
head, number, tail = "", "", ""
number_idx, tail_idx = -1, -1
# number start index 찾기
for j in range(len(files[idx])):
if files[idx][j] in number_list:
head = files[idx][:j]
# print(head)
number_idx = j
break
# tail start index 찾기
for j in range(number_idx, len(files[idx])):
if files[idx][j] not in number_list:
number = int(files[idx][number_idx:j])
break
tail = files[idx][j:]
files[idx] = [head, number, tail]
구현하다가 regex가 떠올랐다. \d로 숫자만 구분할 수 있어서 다음과 같이 구상해볼 수 있다.
re.compile(r'(\d+)')
코드에서는 split만 하면 되기 때문에 re.split을 사용했다.
정렬은 우선순위를 sort 함수에 넘겨주면 알아서 계산해준다. head와 tail에 대해서만 정렬을 수행하면 되기 때문에 sort 함수의 key에 다음의 람다 함수를 넘겨준다.
lambda x: (x[0].lower(), int(x[1]))
java의 Comparable inreface를 사용해서 비교할 수도 있다고 한다. python에서는 __cmp__를 통해서 구현할 수 있는데 이 문제에서는 사용할 이유가 없을 것 같다. 좀 더 복잡한 형식의 정렬 알고리즘이 요구된다면 사용할 법하다.
https://github.com/naem1023/codingTest/blob/master/sort/pg-30-17686.py