코딩테스트/프로그래머스

[프로그래머스] [Level 2] [2018 KAKAO BLIND RECRUITMENT 3차] 파일명 정렬

박소민 2022. 6. 3. 18:23
파일명 정렬
 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

 

  • 다른 사람 풀이
    • head, number, tail 나눠서 문자열로 저장
    • 여러 문자열을 리스트에 하나의 튜플로 저장: answer.append((head, number, tail))
    • head는 모두 대문자로 생각하고 정렬, number는 int로 계산해서 정렬
      • 값의 변경 없이 sort에서 key값에 넣으면서 정렬 특징만 부여 가능
      • answer.sort(key=lambda x: (x[0].upper(), int(x[1])))
        • head 우선, number 차선으로 정렬
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]   # 원래 형태로 문자열 만들어서 반환