def solution(files):
answer = []
for f in files:
head, number, tail = '', '', ''
number_check = False
for i in range(len(f)): # 문자열 자르기
if f[i].isdigit(): # 처음 나오는 숫자부터는 NUMBER로
number += f[i]
number_check = True
elif not number_check: # NUMBER가 나오기 전까지는 HEAD
head += f[i]
else: # NUMBER가 이미 나왔고, 숫자가 아닌 문자가 나오면 TAIL
tail = f[i:]
break
answer.append((head, number, tail)) # HEAD, NUMBER, TAIL 하나의 튜플로 저장
answer.sort(key=lambda x: (x[0].upper(), int(x[1]))) # HEAD 우선, NUMBER 차선으로 정렬
return [''.join(t) for t in answer] # 원래 형태로 문자열 만들어서 반환
풀이 설명
숫자를 기준으로 slicing을 이용해서 head, number, tail을 구분한다.
그 다음 람다를 이용해서 정렬한다.
정렬한후 .join함수를 이용해서 문자열로 바꿔준다.
느낀점
나는 정렬문제만 나오면 heapq를 사용하려고 하는 것 같다. 다음부터는 lambda를 최우선으로 생각해야겠다.
lambda를 사용할때 단순 정렬이 아니라 .upper나 int()함수를 취해줘도 원래 값에는 영향을 미치지 않고 정렬조건을 줄 수 있다는 것을 배웠다.