본문 바로가기
프로그래머스/Python

[프로그래머스] [3차] 파일명 정렬 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 9. 11.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 파일명을 head, number, tail 부분으로 나누어 head를 기준으로 정렬하고 동일하면 number을 기준으로 정렬하며, number 부분도 동일하면 입력받은 파일명의 순서를 기준으로 정렬한 결과를 구하는 문제이다.

리스트를 정렬할 때는 이전 정렬한 결과를 가지고 다음 정렬이 이루어지므로 정렬 순서를 거꾸로 생각해야 한다.

또한 head 부분은 대소문자가 구분이 없고, number 부분은 숫자로 생각하여 오름차순 정렬해야 한다.

 

  1. 파일명을 나눈 결과를 저장할 리스트를 생성한다. li = list()
  2. 파일명을 하나씩 불러온다. for i in files
  3. head 부분을 저장할 변수를 생성한다. head = ""
  4. 인덱스 위치를 저장할 변수를 생성하고 초기화한다. j = 0
  5. 파일명에서 숫자가 나오기 전까지 반복하며 while (not i[j].isnumeric())
  6. 문자를 head 부분으로 추가한다. head += i[j]
  7. 문자를 추가했다면 다음 문자 위치로 인덱스를 이동한다. j += 1
  8. number 부분을 저장할 변수를 생성한다. number = ""
  9. 문자가 나오기 전까지 반복하며 while (i[j].isnumeric())
  10. 숫자를 문자 형식으로 number 부분에 추가한다. number += i[j]
  11. 문자를 추가했다면 다음 문자 위치로 인덱스를 이동한다. j += 1
  12. 만약 이동한 다음 위치가 해당 파일명의 끝을 벗어나면 tail 부분이 없는 것이므로 종료한다. if (j >= len(i)): break
  13. 마지막 tail 부분은 현재 number 부분 뒤에서 끝까지 부분이다. tail = i[j : ]
  14. 나눈 파일명을 하나의 리스트로 묶고 word = [head, number, tail]
  15. 나눈 파일명을 리스트에 추가한다. li.append(word)
  16. 파일명을 모두 분리하여 저장했다면 우선 number를 기준으로 오름차순 정렬한다. li.sort(key = lambda x : int(x[1]))
  17. 다음으로 처음 정렬 기준인 head를 대소문자 상관없이 오름차순 정렬하므로 소문자로 통합한 결과를 기반으로 정렬한다. li.sort(key = lambda x : x[0].lower())
  18. 최종적으로 정렬한 파일명을 하나씩 불러와 for i in li
  19. 하나의 파일명으로 저장할 변수를 생성하고 word = ''
  20. 분리된 파일명을 하나씩 불러오며 for j in i
  21. 하나의 파일명으로 붙여준다. word += j
  22. 다시 만들어준 파일명을 정답 리스트에 추가한다. answer.append(word)
반응형

3. 소스코드

def solution(files):
    answer = []
    
    li = list()
    for i in files:
        head = ""
        j = 0
        while (not i[j].isnumeric()):
            head += i[j]
            j += 1
        
        number = ""
        while (i[j].isnumeric()):
            number += i[j]
            j += 1
            if (j >= len(i)):
                break

        tail = i[j : ]
    
        word = [head, number, tail]

        li.append(word)

    li.sort(key = lambda x: int(x[1]))
    li.sort(key = lambda x: x[0].lower())

    for i in li:
        word = ''
        for j in i:
            word += j
        answer.append(word)
    
    return answer
728x90
반응형