DevKim

[Python] 2018 카카오 BLIND RECRUITMENT - 파일명 정렬 본문

알고리즘 PS

[Python] 2018 카카오 BLIND RECRUITMENT - 파일명 정렬

on_doing 2021. 2. 22. 17:08
728x90

programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

[ 알고리즘 ]

구현

 

[문제 접근]

문자열을 잘 다루느냐와 정렬을 할 수 있는지가 이문제의 관건이라고 생각한다.

1. 문제에서 대소문자를 고려하지 않기 때문에, 처음부터 모두 소문자로 바꿔주고 시작

2. 파이썬 정규표현식 re를 이용하여 HEAD 부분과 NUMBER 부분을 나누어주었다. 이때 TAIL 부분은 정렬에 고려하지 않아도되므로 정렬에 고려해야할 대상인 index 를 넣어줌

3. 문제에 나온 우선 순위를 고려하여 정렬 

 

[코드]

import re
def solution(files):
    answer = []
    filtering=[]
    
    for i in range(len(files)):
        
        file=files[i]
        List=[]
        
        #모두 소문자로 바꾸기
        file=file.lower()
        
        #Head
        p1=re.compile('[^0-9]+')
        head=p1.findall(file)[0]
        
        List.append(head)
        
        #number
        p2=re.compile('[0-9]{1,5}')
        number=p2.findall(file)[0]
        List.append(number)
        
        #tail 대신 index 저장 (순서 기억을 위해)
        List.append(i)
        
        filtering.append(List)
    
    filtering=sorted(filtering,key=lambda x:int(x[1]))
    filtering=sorted(filtering,key=lambda x:x[0])
        
    for a,b,index in filtering:
        answer.append(files[index])
    
    return answer

 

728x90
Comments