IoT 기기 관리 서버는 배포 이력에 남아 있는 펌웨어 버전 문자열 목록을 관리합니다.
현재 버전 current에서 문제가 발견되면, 현재 버전보다 낮은 버전 중 가장 높은
것부터 차례로 롤백 후보를 제시해야 합니다.
버전 문자열은 다음 형식입니다.
<코어> 예: "2.10.3", "1.0", "10"
<코어>-<프리릴리스> 예: "2.10.3-beta.2", "1.0.0-rc.1.hotfix".로 구분된 숫자 세그먼트 1~4개입니다.- 뒤에 .로 구분된 식별자 1~4개이며, 각 식별자는
숫자로만 이루어졌거나 소문자 알파벳으로만 이루어져 있습니다.두 버전의 우선순위(높고 낮음)는 아래 규칙으로 비교합니다.
1.9 < 1.10, 1.02.3 = 1.2.3). 세그먼트 개수가 다르면 부족한 쪽을
0으로 채워 비교합니다 (1.0 = 1.0.0, 1.0 < 1.0.0.1).2.0.0-rc.1 < 2.0.0).beta.2 < beta.11)alpha < beta)alpha.1 < alpha.beta)alpha < alpha.1)solution(versions, current, k)은 versions 중 current보다 엄격히 낮은
버전만 골라 높은 것부터 내림차순 으로 정렬한 뒤 앞에서 k개를 반환합니다.
versions에 먼저 등장한 것이 앞에 옵니다
(안정 정렬). 표기가 달라도 규칙상 같으면(예: 1.0과 1.0.0) 같은 버전입니다.k개 미만이면 있는 만큼만 반환합니다.| versions | current | k | result |
|---|---|---|---|
["1.2.0","1.10.0","1.9.3","1.2.0-rc.1","2.0.0"] |
"2.0.0" |
3 |
["1.10.0","1.9.3","1.2.0"] |
["3.0.0-alpha","3.0.0-alpha.1","3.0.0-alpha.beta","3.0.0-beta.2","3.0.0-beta.11","3.0.0-rc.1"] |
"3.0.0" |
4 |
["3.0.0-rc.1","3.0.0-beta.11","3.0.0-beta.2","3.0.0-alpha.beta"] |
["1.0","1.0.0","1","1.0.0.1"] |
"2" |
10 |
["1.0.0.1","1.0","1.0.0","1"] |
1.10.0은 1.9.3보다 높습니다(둘째 세그먼트 10 > 9). 2.0.0은 현재 버전과 같아 제외됩니다.rc.1 > beta.11 > beta.2 > alpha.beta > alpha.1 > alpha 순입니다.1.0, 1.0.0, 1은 모두 같은 버전이므로 입력 순서를 유지합니다.1 ≤ versions.length ≤ 10,0001 ≤ k ≤ 10,0000 이상 1,000,000 이하입니다 (선행 0이 있을 수 있음).current도 같은 형식의 버전 문자열입니다 (versions에 없을 수도 있음).시간 복잡도 목표: O(n log n × L) (L = 버전 문자열 최대 길이)
▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.