알고리즘/프로그래머스문제풀이

[Python/프로그래머스]파일명 정렬_구현

개발자 덕구🐾 2022. 10. 20. 22:00
728x90

 

 

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

 

반응형