Algorithm

[카카오 코테 2018 | python] 파일명 정렬

삐롱K 2025. 6. 23. 18:24

 

Q1) 문제를 어떻게 이해했나요?
A1) 파일명은 [HEAD][NUMBER][TAIL] 형태
정렬 기준은 다음과 같아요:
1. HEAD를 대소문자 구분 없이 정렬 (사전 순)
2. HEAD가 같으면 NUMBER를 정수로 비교해 정렬
3. 둘 다 같으면 입력 순서를 유지 (Stable Sort)
Q2) 문제를 어떻게 풀 예정인가요?
A2)
1. 파일명을 HEAD, NUMBER, TAIL로 나누기
2. HEAD는 소문자로 변환해서 비교
3. NUMBER는 정수로 변환해서 비교
4. 정렬 후 원래 문자열 반환

 

💫  최적화된 코드 (정규표현식 안쓰고, 하나씩 순회하는 방법)

def solution(files):
    def split_file(index, file):
        head, number, i = '', '', 0
        length = len(file)

        while i < length and not file[i].isdigit():
            head += file[i]
            i += 1

        while i < length and file[i].isdigit():
            number += file[i]
            i += 1

        return (head.lower(), int(number), index, file)  # index 추가!


    # 튜플 정렬 → 정렬 기준은 head, number, index 순서
    # i = 0
    # f = files[0]
    for i, f in enumerate(files):
        files[i] = split_file(i, f)
        # files[i] = (files[i][0], files[i][1], i, files[i][3])  # index 추가
    sorted_files = sorted(files)
    
    # 결과에서 파일명만 추출
    return [x[3] for x in sorted_files]

 

함수명 설명 🧸💕

isdigit() 문자열이 숫자(0~9)로만 구성됐는지 확인 '123'.isdigit() → True
isalpha() 문자열이 알파벳(az, AZ)만 포함했는지 확인 'abc'.isalpha() → True
isalnum() 알파벳 + 숫자로만 구성됐는지 확인 'abc123'.isalnum() → True
isspace() 문자열이 공백 문자(스페이스 등)인지 확인 ' '.isspace() → True
islower() 문자열이 소문자로만 구성됐는지 확인 'abc'.islower() → True
isupper() 문자열이 대문자로만 구성됐는지 확인 'ABC'.isupper() → True

 

[추천 강의]

https://inf.run/7TU84

 

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘| 딩코딩코 - 인프런 강의

현재 평점 5.0점 수강생 2,019명인 강의를 만나보세요. 초보자도 쉽게 이해하는 단계별 설명으로, 막연했던 코딩 테스트가 명확해집니다. 필요한 것만 배우고 바로 실전에 적용하세요! 알고리즘,

www.inflearn.com

 

https://inf.run/jzapB

 

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법| 딩코딩코 - 인

현재 평점 5.0점 수강생 457명인 강의를 만나보세요. 모든 이력서가 비슷해 보이는 세상, ‘차별화’가 합격을 만듭니다. 6주간, 백엔드 실무자가 직접 전하는 실전 이력서 전략 4가지를 배우세요.

www.inflearn.com

 

728x90
반응형