2018 카카오 블라인드 코딩테스트에 출제됐던 문제이다. 문제의 조건은 주어진 문자열 배열 files를 head, number, tail 세부분으로 나눈 후 다음의 조건으로 정렬해서 반환하는 것이다.
def solution(files):
dic = list()
answer = list()
for i in files:
head, num, tail = '', '', ''
h = False
for j in i:
if j.isdigit() and len(tail) == 0:
num += j
h = True
elif not h:
head += j
else:
tail += j
dic.append([head, num, tail])
dic.sort(key=lambda x: (x[0].lower(), int(x[1])))
for i in dic:
answer.append(''.join(i))
return answer
주어진 조건대로 구현했는데 테스트케이스가 3번 부터 계속 틀려서 무엇인가 했는데 “abc01.jpg”이런식으로 문자나 숫자가 한번씩 등장하는 경우에는 정렬이 잘 됐지만 “abc01de02cd.jpg”이런식으로 숫자가 여러번 등장하는 경우 제대로 정렬이 되지 않았다. 이 점을 참고해 head, number, tail로 나눈 후 sort함수로 키를 지정 해주면 된다. 파이썬의 내장 정렬 함수는 기본적으로 stable 정렬을 하기 때문에 따로 구현해줄 필요가 없다.