모르지 않다는 것은 아는것과 다르다.

알고리즘

프로그래머스 파일명 정렬 문제

채마스 2022. 2. 26. 01:10

접근 방식(알고리즘 분류)

  • 문자열 문제

내 풀이

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]   # 원래 형태로 문자열 만들어서 반환

풀이 설명

  • 숫자를 기준으로 slicing을 이용해서 head, number, tail을 구분한다.
  • 그 다음 람다를 이용해서 정렬한다.
  • 정렬한후 .join함수를 이용해서 문자열로 바꿔준다.

느낀점

  • 나는 정렬문제만 나오면 heapq를 사용하려고 하는 것 같다. 다음부터는 lambda를 최우선으로 생각해야겠다.
  • lambda를 사용할때 단순 정렬이 아니라 .upper나 int()함수를 취해줘도 원래 값에는 영향을 미치지 않고 정렬조건을 줄 수 있다는 것을 배웠다.

'알고리즘' 카테고리의 다른 글

점프와 순간이동  (0) 2022.02.26
프로그래머스 이진트리 문제  (0) 2022.02.26
프로그래머스 여행경로 문제  (0) 2022.02.26
프로그래머스 스타수열 문제  (0) 2022.02.26
프로그래머스 보석쇼핑 문제  (0) 2022.02.26