출처 : https://school.programmers.co.kr/learn/courses/30/lessons/17686#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr


1) 요구사항 분석 : 문제 읽기
파일명 정렬
2) 설계 : 접근 방식
1.files 배열을 순회하면서 각각의 file을 head와 num으로 나눠주는 함수에 넣음 -> def headNum
2. def headNum 함수에서는 리턴으로 head 와 num을 넘겨줌
2-1 우선 숫자인지 판별!
그리고 5까지만ㅇㅇ(문제에서 주어진 조건)
2-2 숫자가 아닐때,
넘버가 비어있으면 아직 헤드인 상황이니까 헤드에 += 해주기
넘버가 비어있지 않으면 이미 헤드, 넘버까지 다 찾은 상태고, 그 다음인 테일이 되니까 반복문 종료!!
2-3 헤드는 전부 소문자로 바꿔줌 -> 문자열.lower()
num은 위에서 str형식으로 받았으니까 int로 바꿔줌
3. 다시 원래로 돌아와서, 리스트에
[원래의 값, 위에서 넘겨받은 헤드, 넘버, 인덱스] 를 추가해줌
4. 여러가지 조건에 따라 순서대로 정렬해줘야하니까 lambda 사용
lst.sort(key=lambda x:(x[1], x[2], x[3]))
5. lst를 for문 돌면서 정답 리스트에 추가해주기
def solution(files):
answer = []
lst = [] # 리스트 안에 리스트로 담아줌
def headNum(x):
head = ""
num = ""
for i in range(len(x)):
if str(0) <= x[i] <= str(9): # 숫자인지 판별
if len(num) < 5:
num += x[i]
else: # 숫자가 아닐 때
if num == "": # 아직 넘버가 비어있으면 헤드!
head += x[i]
else : # 이거 꼭 해주기!! 넘버가 이미 존재하니까 테일임!!!!
break
head = head.lower()
num = int(num)
# print(head, num)
return (head, num)
for i in range(len(files)):
head, num = headNum(files[i])
lst.append([files[i], head, num, i]) # 원래이름, 헤드, 넘버, 인덱스
lst.sort(key=lambda x:(x[1], x[2], x[3]))
for file in lst:
answer.append(file[0])
return answer'알고리즘 > programmers' 카테고리의 다른 글
| [programmers] 명예의 전당(1) / 코딩테스트 연습 / 파이썬 (0) | 2022.11.25 |
|---|---|
| [programmers] 약수의 합 / 코딩테스트 연습 / 파이썬 (0) | 2022.11.19 |
| [programmers] 입양 시각 구하기(1) /SQL (0) | 2022.10.02 |
| [programmers] 이름에 el이 들어가는 동물 찾기 /SQL (0) | 2022.09.30 |
| [programmers] 중성화 여부 파악하기 /SQL (0) | 2022.09.29 |
댓글