링크

파일명 정렬 - 2018 카카오 블라인드

문제 요약

  • 파일을 조건에 맞춰 분리하여 정렬

초반 접근

  • 배열로 구성된 파일명들을 하나씩 분리, 이후에 정렬

해결법

  • 각 배열 요소마다 head,number,tail을 분리하였다.
    • head는 앞의 소문자 대문자와 ‘-‘,’_’,’ ‘,’.’로 하나이상 구성됨
    • number는 연속된 숫자로 하나이상 존재
    • tail은 나머지 숫자,대문자,소문자,-,_,’ ‘,’.’으로 구성
  • 분리하기 위해 정규식을 이용하여 분리

알고리즘 간단 정리

  • 배열의 요소마다 순회하며 head,number,tail로 분리
    • 정규식으로 괄호를 이용한 그룹으로 분리
    • /([a-zA-Z-_ .]+)([0-9]+)(.*)/
      • [a-zA-Z-_ .]+는 소문자(a-z),대문자(A-Z),빼기부호(-),밑줄(_),공백( ),점(.)을 포함하고 +기호는 하나이상이라는 조건으로 head그룹을 구성한다.
      • [0-9]+는 0-9까지의 숫자를 +(하나이상)를 이용하여 연속된 숫자의 그룹을 구성한다.
      • .*는 모든 문자나 숫자형식이 0이상 존재하는것을 그룹하였다.
      • 위 정규식을 통해 바로 head,number,tail을 분리하였다.
    • head는 대소문자 구분이 없으므로 소문자로 통일시킨다.
    • number는 문자형식이 아닌 숫자 형식으로 타입을 변환하여 저장한다.
    • 결과물을 바로 출력하기위해 기존 문자열도 저장한다.
    • ex)Efa _fE- 00112nifj3 -> [‘Efa _fE- 00112nifj3’,’efa _fe- ‘,112,’nifj3’]
  • 정렬 sort를 진행한다.
    • head인 1번요소를 우선정렬, number인 2번요소를 다음 정렬 기준으로 하여 정렬한다.
  • 정렬된 내용에서 미리 저장한 기존문자열을 분리한다.

후기

  • 이전에 풀다가 실패했었던 문제이다.
  • 틀린것을 확인하니 정규식을 잘 못 작성한 흔적이 있었다.
    • head에서 공백 요소를 무시하기
    • tail을 구분하는 조건이 까다로움
    • number부분도 조건이 복잡하게 작성함
  • 새롭게 다시 푸니 바로 풀렸는데 이걸 이렇게 복잡하게 생각하지 않아도 될 문제였다.
  • 정규식에 대한 이해만 있으면 빨리 풀 수 있는 문제이다.

아이디어

  • regex, 정규식
  • sort