문자열을 원하는 단위로 잘라서 비교할 수 있어야 하는 문제였다. 파이썬은 sort()
함수가 있어서 진짜 편리하다고 다시한번 느꼈다.
sort()
함수 내에서 대소문자를 무시하고 정렬하는 방법은 str.lower()
요소를 key 값으로 전달해주면 된다.
현재 문제에서는 HEAD
내에서는 대소문자를 무시하고 정렬하고, 만약 동일한 경우 NUMBER
비교하여 정렬해야 되므로 두 개의 인자를 기준으로 정렬해야 한다. 따라서 lambda
문법을 사용하여 정렬했다.
다만 람다 문법에서 주의할 것이 하나 있다.
arr.sort(key = lambda x : (x[0], x[1]))
에서 lambda x : (x[0], x[1])
이 부분의 괄호를 생략할 시 문법 에러가 난다. 주의!
def solution(files):
answer = []
arr = [["", "", ""] for _ in range(len(files))]
for i in range(len(files)):
headEnd = False
numEnd = False
for j, f in enumerate(files[i]):
if (not headEnd and not numEnd) and not (48 <= ord(f) <= 57):
arr[i][0] += f
elif (not numEnd) and 48 <= ord(f) <= 57:
arr[i][1] += f
headEnd = True
else:
numEnd = True
arr[i][2] += files[i][j:]
break
arr.sort(key=lambda x: (x[0].lower(), int(x[1])))
for item in arr:
answer.append("".join(map(str, item)))
return answer