티스토리 뷰

728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/17686


파일명은 크게 HEAD, NUMBER, TAIL의 세 부분으로 구성

파일명 HEAD NUMBER TAIL
foo9.txt foo 9 .txt
foo010bar020.zip foo 010 bar020.zip
F-15 F- 15 (빈 문자열)

정렬순서

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

주의할점

  • 파일명은 100 글자 이내로, 영문 대소문자, 숫자, 공백(" ), 마침표(.), 빼기 부호(-")만으로 이루어져 있다.
  • HEAD는 숫자가 아닌 문자로 이루어져 있으며, 최소한 한 글자 이상이다.
  • NUMBER는 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다. 0부터 99999 사이의 숫자로, 00000이나 0101 등도 가능하다.
  • TAIL은 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다.

입력값

files ~ 파일명 리스트.

  • 영문 대소문자, 숫자, 공백(" ), 마침표(.), 빼기 부호(-")로 구성

출력

정렬된 배열


접근방법

구분이 필요하다.

head는 문자만

number는 최대 5글자의 연속된숫자.

tail는 나머지부분. nil값일 수도 있음.

number가 연속된 숫자이니, head 마지막부터 5칸 for문 돌면서 숫자가 끈키는 순간 or 5칸 이후부터 tail로 보면될것 같다.

정렬은 기본 내장함수인 sort를 사용하되, 클로저로 규칙을 적용해주면 된다. return값이 true면 값이 바뀌고, false면 바꾸지 않는다.

head부분에서 대소문자 구분을 하지않기위해 소문자로 변환 후 같지 않을경우 정렬을 하도록 작성했는데.. return 값에선 lowercased()를 안써줘서 몇개의 테스트케이스가 계속 실패가 떳다 =_=.. 틀린게 없다고 생각될땐 문제를 다시 읽어보고 직접 테스트케이스를 만들어서 넣어보자..

코드


더 깔끔한 코드..

728x90
댓글