Programmers [3차] 파일명 정렬 Level 2 - python

유형석·2022년 8월 9일
1

python/Algorithm

목록 보기
5/9
post-thumbnail

파일명 정렬 - 문제 링크

내 풀이

def solution(files):
    sort_files = []
    result = []
    cnt = 0
    for file in files:
        head, num, tail = [], [], []
        for ch in file:
            if not ch.isdigit() and not num:
                head.append(ch)
            elif ch.isdigit() and not tail:
                num.append(ch)
            else:
                tail.append(ch)
        if not tail:
            sort_files.append([''.join(head), ''.join(num), '', cnt])
        else:
        	sort_files.append([''.join(head), ''.join(num), ''.join(tail), cnt])
        cnt += 1
        
    sort_files = sorted(sort_files, key=lambda x: [x[0].lower(), int(x[1]), x[3]])
    
    for i in sort_files:
        del i[3]
        result.append(''.join(i))
    
    return result
  • 처음 문제를 봤을때 정규 표현식으로 풀면 되겠다고 떠올렸지만 아직 정규표현식을
    제대로 공부하지 않아 익숙하지도 않고 문제부터 풀어보자 라는 생각으로 풀었다
  • 다 푼 후 다른사람의 풀이를 봤을때 정규표현식을 사용하여 2줄만에 끝낸 것을 보고 현타가 왔다 ㅠㅠ 빨리 정규표현식 익숙해 져야지...

입출력



위 그림과 같이 앞부분 문자가 들어온 후 (HEAD)
숫자가 들어온다 (NUMBER)
그 뒤 들어오는 TAIL 부분은 문자 - 숫자 식으로 들어와도 TAIL로 정렬되어야 한다

내 풀이 해설

for ch in file:
	if not ch.isdigit() and not num:
		head.append(ch)
	elif ch.isdigit() and not tail:
		num.append(ch)
	else:
		tail.append(ch)

isdigit() -> 숫자면 True, 숫자가 아니라면 False 반환하는 함수로
isdigit을 사용하여 숫자, HEAD를 구분하였으며,

not num
not tail

위 조건을 통하여 HEAD -> NUMBER -> TAIL
순으로 채워지는 리스트에서 NUMBER로 넘어갔다면 HEAD list에 더해주지 않는 식으로
작성하였다

if not tail:
	sort_files.append([''.join(head), ''.join(num), '', cnt])
else:
	sort_files.append([''.join(head), ''.join(num), ''.join(tail), cnt])
cnt += 1

문제 조건에 TAIL이 빈 문자열 일 수 있다하여 위와 같이 작성
cnt 값은 파일명이 완전히 같을 경우 입력순서에 따라 정렬하라고 명시되어 있어
리스트 끝에 추가해 주었다

sort_files = sorted(sort_files, key=lambda x: [x[0].lower(), int(x[1]), x[3]])

sorted를 사용하여 HEAD 부분, NUMBER 부분, cnt로 선언해준 입력 순서 부분으로 정렬

for i in sort_files:
	del i[3]
	result.append(''.join(i))

cnt부분은 지우고 문자를 합치고 결과로 return

포인트

  • isdigit() 함수
  • 입력 순서 구현 방식 떠올리기
  • 정규표현식을 쓰면 100배는 쉬움
profile
Carrot_hyeong

0개의 댓글