https://school.programmers.co.kr/learn/courses/30/lessons/17686
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사실 알고 코드를 보면
간단하고 쉬운데
왜 딱 보면 너무 어려워보일까...🥴
정답코드 :
def solution(files):
answer = []
for f in files:
head, number, tail = '', '', ''
number_check = False
for i in range(len(f)): # 문자열 자르기
if f[i].isdigit(): # 처음 나오는 숫자부터는 NUMBER로
number += f[i]
number_check = True
elif not number_check: # NUMBER가 나오기 전까지는 HEAD
head += f[i]
else: # NUMBER가 이미 나왔고, 숫자가 아닌 문자가 나오면 TAIL
tail = f[i:]
break
answer.append([head, number, tail]) # HEAD, NUMBER, TAIL 하나의 튜플로 저장
answer.sort(key=lambda x: (x[0].upper(), int(x[1]))) # HEAD 우선, NUMBER 차선으로 정렬
return [''.join(t) for t in answer] # 원래 형태로 문자열 만들어서 반환
근데 사실 이 생각하기 쉽지 않을듯..!
그래도 생각을 해내야하는데
1. 먼저 head, number, tail 으로 빈 문자열을 초기화 해준다.
2. 문자열을 돌면서 3가지 경우로 나누어서 해당 문자를 head, number, tail으로 나눈다.
2-1 . 만약 숫자면 number에 붙여넣는다. 이때 number가 있었다는 것을 check해준다.
2-2 . 만약 숫자가 아닌데 number check가 안되어있다면 head에 붙인다.
2-3 . 만약 숫가가 아니고 number check는 되어있다? 그러면 tail에 붙인다.
3. 이제 구한 head, number, tail을 사이 좋게 answer에 넣어줍니다.
4. 정렬을 1순위 : 모두 대문자로 만든 head, 2순위 : number순
5. answer을 돌면서 join을 이용해서 붙여주고 이거를 list로 묶어서 return 한다.
for문을 돌면서 이렇게 3개의 조건으로 나누는 걸 생각하고
정렬을 어떻게 할지 생각만 하면 쉽게 풀 수 있을것같다.
나는 대소문자 구분없이 하는데 반환형은 원래대로 하라그래서 어떻게 해야할지 모르겠었는데
그냥 정렬의 key를 .upper()하면 되는 거였다...ㅎㅎ
이제 알았으니까 잊어먹지만 말자
참고 블로그 :
https://dev-note-97.tistory.com/124
[프로그래머스] [3차] 파일명 정렬 / Python
문제주소 : programmers.co.kr/learn/courses/30/lessons/17686 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오
dev-note-97.tistory.com
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]다시풀어보는_수식최대화_[구현,permutation,re.split] (1) | 2023.10.29 |
---|---|
[Python/프로그래머스]점 찍기_구현 (0) | 2022.12.05 |
[Python/프로그래머스]n진수게임_구현 (0) | 2022.10.20 |
[Python/프로그래머스]압축_구현 (0) | 2022.10.20 |
[Python/프로그래머스]방금그곡_구현 (0) | 2022.10.19 |