_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 [3차] 파일명 정렬 파이썬(Python)
코딩테스트

[코딩테스트] 프로그래머스 [3차] 파일명 정렬 파이썬(Python)

2023. 3. 17. 11:21
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/17686

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import re
def solution(files):
    for i in range(len(files)):
        file = files[i]
        numbers= re.findall('\d+', file)
        number = numbers[0]
        s = file.index(number)
        e = len(number)
        split_file = [file[:s], file[s:s+e], file[s+e:]]
        files[i] = split_file
    files = sorted(files, key=lambda x : [x[0].lower(), int(x[1])])



    result = [''.join(file) for file in files]
    return result

주어진 file들을 HEAD, NUMBER, TAIL로 분리하기 위하여 먼저 file에 포함된 숫자(NUMBER)를 찾아내는 작업을 진행했습니다.

 

re라이브러리의 findall('\d+', file)함수로 숫자를 찾아내었습니다.

 

이때 찾아낸 숫자가 여러개라면 가장 먼저 등장하는 숫자를 이용해야 합니다 따라서 numbers[0]을 number로 저장합니다.

다음은 file.index()함수를 사용하여 number의 위치를 찾아냅니다 index()함수는 동일한 숫자가 조회할 경우 가장 앞에 있는 숫자의 시작위치를 찾게 됩니다.

 

예를 들어 주어진 입력이 file : foo020bar020.zip 와 같다면number는 앞에 있는 020이 됩니다. 이때 020은 foo 오른쪽, bar 오른쪽 두 군데 존재하지만 index()는 foo 오른쪽에 있는 3을 반환합니다.

 

숫자의 시작 위치를 s와 number의 길이 e를 이용하여 HEAD, NUMBER, TAIL을 분리합니다.

 

문제의 정렬 기준을 확인해보겠습니다.

  • 파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다.
  • 파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
  • 두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다.

sorted()함수에서 위의 정렬기준을 만족하는 것을 확인할 수 있습니다.

 

정렬시킨 files를 다시 모아주는 작업을 진행한뒤 결과를 반환합니다.

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 프로그래머스 예상 대진표 파이썬(Python)  (1) 2023.03.20
[코딩테스트] 백준 차이를 최대로 파이썬(Python)  (0) 2023.03.18
[코딩테스트] 프로그래머스 땅따먹기 파이썬(Python)  (0) 2023.03.16
[코딩테스트] 프로그래머스 조건에 맞는 사용자 정보 조회하기 MySQL  (0) 2023.03.14
[코딩테스트] 프로그래머스 조건에 맞는 사용자와 총 거래금액 조회하기 MySQL  (0) 2023.03.13
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 예상 대진표 파이썬(Python)
    • [코딩테스트] 백준 차이를 최대로 파이썬(Python)
    • [코딩테스트] 프로그래머스 땅따먹기 파이썬(Python)
    • [코딩테스트] 프로그래머스 조건에 맞는 사용자 정보 조회하기 MySQL
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바