문제1095--자연스러운 정렬

1095: 자연스러운 정렬

시간제한 : 1.000 sec  메모리제한 : 128 MB

문제 설명

취업 포트폴리오 용으로 파일 브라우져를 만들어보고 있는 영준이는 1주일 내내 불꽃 코딩을 하며 그럴듯한 파일 브라우져를 만들었습니다.

자신의 작품에 만족을 하고 있었는데 다양한 TV쇼 프로가 들어있는 폴더에 들어가니 뭔가 이상한게 보였습니다. 대부분의 파일이 파일 이름과 순서를 나타내는 번호 혹은 시간등이 들어가 있는데, 단순 정렬 함수를 이용해서 정렬 할 경우 (사전순서) 10이 3보다 먼저 나오는 문제들이 발생하고 있는 것 입니다.

너무 어색함을 느껴서 좀더 자연스럽게 정렬을 하고 싶은 영준이는 아래와 같은 규칙을 세웠습니다.

  1. 숫자와 문자의 비교에서는 숫자가 우선합니다.
  2. 문자들 간의 대소비교는 ASCII 크기 값을 기준으로 합니다. (단, 문자로는 영문 소문자, 하이픈(-), 언더바(_), 콜론(:), 점(.) 만 포함 됩니다)
  3. 숫자와 숫자의 비교를 할 때는 숫자를 구성하는 모든 숫자를 비교해야 합니다.
    1. "13" 와 "3"의 비교는 13과 3이 비교이므로 "3" 이 더 작아야 합니다.
    2. Leading Zero가 있을 수 있으므로 고려 해야합니다. "003" 과 "01" 에서는 "01" 이 더 작은숫자가 됩니다. (1이니까요)
    3. 단, 숫자의 경우 길이가 18글자를 넘지 않습니다.
  4. 그래도 같은 경우는 먼저 나온 파일명을 우선합니다.

위의 규칙에 따라 파일명을 정렬하여 출력하는 프로그램을 작성하세요.

입력 설명

첫 줄에는 파일의 갯수 N (1 <= N <= 100,000) 이 주어집니다.
그 다음줄 부터는 N개의 파일 이름 (영문 소문자, 하이픈(-), 언더바(_), 콜론(:), 점(.), 숫자로 이루어졌으며 길이는 최소 1글자, 최대 25글자 입니다)

출력 설명

위의 규칙에 따라 정렬한 순서대로 한 줄에 하나씩 파일명을 출력합니다.

입력 예시 Copy

10
mt_5_43.jpg
mt_10_20.jpg
mt_10_5.jpg
mt_4_55.jpg
mt_4_53.jpg
photo_1.jpg
photo_13.jpg
photo_3.jpg
pic-9_10_23:5.jpg
pic-9_9_3:55.jpg

출력 예시 Copy

mt_4_53.jpg
mt_4_55.jpg
mt_5_43.jpg
mt_10_5.jpg
mt_10_20.jpg
photo_1.jpg
photo_3.jpg
photo_13.jpg
pic-9_9_3:55.jpg
pic-9_10_23:5.jpg

도움

"01abc1" < "001abc2"   -> TRUE. Leading zero 는 무시합니다.
"1" < "."  -> TRUE. ASCII 코드 값으로는 "." 이 더 작지만 숫자가 우선한다는 규칙에 의해 참 입니다.
"s001b0023" == "s1b23"   -> TRUE. Leading zero 를 무시할 경우 문자, 숫자들이 모두 같으므로 두 문자열은 같습니다. 이 경우 먼저 나온 파일이 우선합니다.
"0ab" < "bc" 문자 앞에 붙은 0은 숫자 0으로 취급해야 합니다.

출처/분류