[Programmers] 파일명 정렬

Updated:

파일명 정렬

파일명 정렬 을 클릭하면 바로 이동한다.

파일명이 주어지면 Head, Number, Tail 로 나누고 Head, Number 을 기준으로 정렬을 하는 문제이다.

예전에 [Programmers] 수식 최대화 코드 분석 문제를 풀면서 정규식을 조금 공부해뒀는데 도움이 됐다.

물론 다른 사람 풀이를 보니 정규식을 조금 더 이용하면 깔끔하게 분리 할 수 도 있었다..

처음엔 re.split(‘([^0-9])’, file) 로 했는데 Tail 부분에 숫자가 또 나올 수 있다는 부분을 간과했다.

때문에 match 를 이용해 Head, Number, Tail 을 분리 해 주었다. 분리를 다 했다면 sorted 와 key 를 이용 해 정렬을 하면 된다.

key 를 두 개 이상으로도 할 수 있다는 사실을 오늘 알았다. 여러 개의 키 들을 괄호로 묶어주면 된다.

Head, Number 을 키로 묶어 두었을때, Head 부분이 같다면 Number 을 기준으로 정렬을 한다.


import re


def solution(files):
	head = []
	num = []
	tail = []
	
	for cur in files:
		head_input = num_input = tail_input = ''
		for val in cur:
			if len(head_input) > 0 and len(num_input) > 0:
				if re.match('[^0-9]', val):
					break

			if re.match('[^0-9]', val):
				head_input += val
			else:
				num_input += val

		head.append(head_input)
		num.append(num_input)
		tail.append(cur[len(head_input) + len(num_input):len(cur)])

	_split = list(zip(head, num, tail))
	box = sorted(_split, key=lambda file: (file[0].upper(), int(file[1])))
	answer = []
	for val in box:
		answer.append(''.join(val))

	return answer

Categories:

Updated:

Leave a comment