코테 노트/프로그래머스

Level 2 [3차] 파일명 정렬 <2018 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2022. 3. 29. 15:58
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3 

 

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

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

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def solution(files):
    answer = []
    filenames = []
    for idx, file in enumerate(files):
        head = ""
        for i in range(len(file)):
            if file[i].isdigit():
                break
            head += file[i]
            
        number = ""
        for j in range(i, len(file)):
            if file[j].isdigit():
                number += file[j]
            else: break
        number = number.lstrip('0')
        
        filenames.append([idx, head.lower(), int(number) if len(number) > 0 else 0])
        
    filenames.sort(key = lambda x:(x[1], x[2], x[0]))
    for file in filenames:
        answer.append(files[file[0]])
    
    return answer

풀이 과정

풀이 시간 45분

 

def solution(files):
    answer = []
    
    #filenames[i] = [files의 idx, HEAD, NUMBER]
    filenames = []
    
    for idx, file in enumerate(files):
    	#HEAD 구하기
        head = ""
        for i in range(len(file)):
            if file[i].isdigit():
                break
            head += file[i]
        
        #NUMBER 구하기
        number = ""
        for j in range(i, len(file)):
            if file[j].isdigit():
                number += file[j]
            else: break   
        #왼쪽에 0이 있는 경우, 제거
        number = number.lstrip('0')
        
        #filenames에 추가하기
        #만약, NUMBER가 '0', '00', '000', '0000', '00000'인 경우 lstrip('0')으로 인해 ''이므로, 예외처리
        filenames.append([idx, head.lower(), int(number) if len(number) > 0 else 0])
    
    #HEAD를 기준으로 오름차순 정렬, NUMBER를 기준으로 오름차순 정렬, 입력 순서를 기준으로 오름차순 정렬
    filenames.sort(key = lambda x:(x[1], x[2], x[0]))
    for file in filenames:
        answer.append(files[file[0]])
    
    return answer
    
#시간복잡도 = O(nlog n), 공간복잡도 = O(n)

 


참고

 

Level 2 [3차] 압축 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17684?language=python3 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] program..

hwayomingdlog.tistory.com

 

Level 2 [3차] 방금그곡 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17683?language=python3 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때..

hwayomingdlog.tistory.com

  • 5. 자동완성

 

728x90
반응형