{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉정렬〉가장 작은 일련번호← 이전다음 →
#078 · 정렬쉬움정렬 + 비교 함수

가장 작은 일련번호

문제

부품 상자마다 번호표가 하나씩 붙어 있고, 상자를 원하는 순서로 늘어놓은 뒤 번호표를 왼쪽부터 그대로 이어 적어 창고 일련번호를 만듭니다. 예를 들어 번호표가 4, 45, 7 이라면 4 45 7 순서로 놓아 "4457", 45 7 4 순서로 놓아 "4574" 를 만들 수 있습니다.

번호표 배열 parts 가 주어질 때, 이렇게 만들 수 있는 가장 작은 일련번호를 문자열로 반환하세요.

  • 이어 붙인 결과의 맨 앞에 0 이 오면 그 0 들은 일련번호에 적지 않습니다. (예: "0790" 은 "790" 으로 적습니다.)
  • 앞의 0 을 모두 지웠을 때 남는 것이 없다면 "0" 을 반환합니다.
solution(parts: number[]): string

예시

parts 반환값 설명
[4, 45, 7] "4457" 4 45 7 순서
[0, 90, 7] "790" 0 7 90 → "0790" → 앞의 0 제거
[52, 5, 58, 505] "50552558" 505 5 25... 처럼 단순 오름차순이 아님
[0, 0, 0] "0" 전부 0이면 "0"

[30, 3] 은 "303" 과 "330" 두 가지가 가능하므로 "303" 이 답입니다. 번호표를 숫자 크기순으로 정렬하는 것만으로는 최솟값이 되지 않는다는 점에 주의하세요.

제약 조건

  • 1 ≤ parts.length ≤ 100,000
  • 0 ≤ parts[i] ≤ 10,000
  • 반환값은 문자열입니다 (매우 길어질 수 있어 숫자 타입으로는 표현할 수 없습니다)

시간 복잡도 목표: O(N log N)

테스트 케이스

예시 1: 4 → 45 → 7 순서
입력: parts = [4,45,7]
출력: "4457"
예시 2: 앞자리 0 제거
입력: parts = [0,90,7]
출력: "790"
예시 3: 단순 오름차순이 아님
입력: parts = [52,5,58,505]
출력: "50552558"
예시 4: 전부 0
입력: parts = [0,0,0]
출력: "0"
번호표 한 개
입력: parts = [8]
출력: "8"
접두 관계인 두 번호표
입력: parts = [30,3]
출력: "303"
같은 숫자로 시작하는 번호표들
입력: parts = [210,21,2]
출력: "210212"
자릿수가 제각각인 경우
입력: parts = [1000,100,10,1]
출력: "1000100101"
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.