Algorithm

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

삐롱K 2025. 6. 23. 18:24
728x90
반응형

 

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
728x90
반응형