프로그래머스 - 파일명 정렬

Dean_Kang·2021년 7월 6일
0

프로그래머스

목록 보기
12/21

문제

2018 카카오 블라인드 코딩테스트에 출제됐던 문제이다. 문제의 조건은 주어진 문자열 배열 files를 head, number, tail 세부분으로 나눈 후 다음의 조건으로 정렬해서 반환하는 것이다.

조건

  • 파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다.
  • 파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
  • 두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다.

코드

def solution(files):
    dic = list()
    answer = list()

    for i in files:
        head, num, tail = '', '', ''
        h = False
        for j in i:
            if j.isdigit() and len(tail) == 0:
                num += j
                h = True
            elif not h:
                head += j
            else:
                tail += j
        dic.append([head, num, tail])

    dic.sort(key=lambda x: (x[0].lower(), int(x[1])))

    for i in dic:
        answer.append(''.join(i))

    return answer

주어진 조건대로 구현했는데 테스트케이스가 3번 부터 계속 틀려서 무엇인가 했는데 “abc01.jpg”이런식으로 문자나 숫자가 한번씩 등장하는 경우에는 정렬이 잘 됐지만 “abc01de02cd.jpg”이런식으로 숫자가 여러번 등장하는 경우 제대로 정렬이 되지 않았다. 이 점을 참고해 head, number, tail로 나눈 후 sort함수로 키를 지정 해주면 된다. 파이썬의 내장 정렬 함수는 기본적으로 stable 정렬을 하기 때문에 따로 구현해줄 필요가 없다.

profile
for the goal

0개의 댓글

관련 채용 정보