728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 파일명을 head, number, tail 부분으로 나누어 head를 기준으로 정렬하고 동일하면 number을 기준으로 정렬하며, number 부분도 동일하면 입력받은 파일명의 순서를 기준으로 정렬한 결과를 구하는 문제이다.
리스트를 정렬할 때는 이전 정렬한 결과를 가지고 다음 정렬이 이루어지므로 정렬 순서를 거꾸로 생각해야 한다.
또한 head 부분은 대소문자가 구분이 없고, number 부분은 숫자로 생각하여 오름차순 정렬해야 한다.
- 파일명을 나눈 결과를 저장할 리스트를 생성한다. li = list()
- 파일명을 하나씩 불러온다. for i in files
- head 부분을 저장할 변수를 생성한다. head = ""
- 인덱스 위치를 저장할 변수를 생성하고 초기화한다. j = 0
- 파일명에서 숫자가 나오기 전까지 반복하며 while (not i[j].isnumeric())
- 문자를 head 부분으로 추가한다. head += i[j]
- 문자를 추가했다면 다음 문자 위치로 인덱스를 이동한다. j += 1
- number 부분을 저장할 변수를 생성한다. number = ""
- 문자가 나오기 전까지 반복하며 while (i[j].isnumeric())
- 숫자를 문자 형식으로 number 부분에 추가한다. number += i[j]
- 문자를 추가했다면 다음 문자 위치로 인덱스를 이동한다. j += 1
- 만약 이동한 다음 위치가 해당 파일명의 끝을 벗어나면 tail 부분이 없는 것이므로 종료한다. if (j >= len(i)): break
- 마지막 tail 부분은 현재 number 부분 뒤에서 끝까지 부분이다. tail = i[j : ]
- 나눈 파일명을 하나의 리스트로 묶고 word = [head, number, tail]
- 나눈 파일명을 리스트에 추가한다. li.append(word)
- 파일명을 모두 분리하여 저장했다면 우선 number를 기준으로 오름차순 정렬한다. li.sort(key = lambda x : int(x[1]))
- 다음으로 처음 정렬 기준인 head를 대소문자 상관없이 오름차순 정렬하므로 소문자로 통합한 결과를 기반으로 정렬한다. li.sort(key = lambda x : x[0].lower())
- 최종적으로 정렬한 파일명을 하나씩 불러와 for i in li
- 하나의 파일명으로 저장할 변수를 생성하고 word = ''
- 분리된 파일명을 하나씩 불러오며 for j in i
- 하나의 파일명으로 붙여준다. word += j
- 다시 만들어준 파일명을 정답 리스트에 추가한다. 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
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.19 |
---|---|
[프로그래머스] 롤케이크 자르기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.17 |
[프로그래머스] 체육복 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.15 |
[프로그래머스] [1차] 프렌즈4블록 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.13 |
[프로그래머스] 등굣길 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.03 |
[프로그래머스] 숫자 짝꿍 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.01 |
[프로그래머스] 옹알이 (2) - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.30 |
[프로그래머스] 뒤에 있는 큰 수 찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.28 |