{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉큐〉물류 로봇 적재 레일← 이전다음 →
#102 · 큐중간큐 시뮬레이션,시간 점프

물류 로봇 적재 레일

문제

물류 센터의 적재 레일은 길이가 railLength칸인 일직선 컨베이어입니다. 대기실에 있는 로봇들은 weights 배열 순서대로(0번부터) 레일에 올라가 반대편 창고로 이동합니다.

레일은 매 초마다 다음 순서로 동작합니다.

  1. 레일 위의 모든 로봇이 한 칸 전진 합니다. 마지막 칸을 넘어간 로봇은 그 시각에 레일에서 내려갑니다(통과 완료).
  2. 그다음, 대기실 맨 앞 로봇 한 대 가 아래 두 조건을 모두 만족하면 레일의 첫 칸에 올라갑니다.
    • 올라간 뒤 레일 위 로봇들의 무게 합이 weightLimit 이하
    • 올라간 뒤 레일 위 로봇 대수가 slotLimit 이하 조건을 만족하지 못하면 그 초에는 아무도 올라가지 않고, 대기 순서도 바뀌지 않습니다.

시각 0에 레일은 비어 있고, 첫 로봇은 시각 1에 올라갑니다. 레일에 시각 t에 올라간 로봇은 railLength칸을 지나 시각 t + railLength에 내려갑니다.

각 로봇이 레일에서 내려가는 시각 을 입력 순서대로 담은 배열을 반환하는 solution(railLength, weightLimit, slotLimit, weights) 함수를 작성하세요.

예시

railLength=2, weightLimit=10, slotLimit=2, weights=[7,4,5,6] → [3,5,6,8]
  시각 1: 0번(7) 진입 → 레일 무게 7
  시각 2: 1번(4)을 올리면 11 > 10 이므로 대기
  시각 3: 0번 하차(=3) → 1번(4) 진입
  시각 4: 2번(5) 진입 (무게 9, 2대)
  시각 5: 1번 하차(=5) → 3번(6)은 5+6=11 > 10 이라 대기
  시각 6: 2번 하차(=6) → 3번(6) 진입
  시각 8: 3번 하차(=8)
 
railLength=4, weightLimit=100, slotLimit=2, weights=[1,1,1] → [5,6,9]
  무게는 넉넉하지만 레일에는 두 대까지만 올라갈 수 있습니다.
  시각 1·2에 0번·1번이 올라가고, 3·4초에는 자리가 없어 대기합니다.
  시각 5에 0번이 내려가면서 빈 자리에 2번이 올라가 시각 9에 내려갑니다.
 
railLength=1, weightLimit=5, slotLimit=3, weights=[5,5] → [2,3]
  레일이 한 칸이라 올라간 로봇은 다음 초에 바로 내려갑니다.

제약 조건

  • 1 ≤ railLength ≤ 10,000
  • 1 ≤ slotLimit ≤ 100,000
  • 1 ≤ weights.length ≤ 100,000
  • 1 ≤ weights[i] ≤ weightLimit ≤ 1,000,000,000 (모든 로봇은 혼자서는 반드시 올라갈 수 있습니다)
  • 반환 배열의 길이는 weights.length와 같고, 원소는 모두 정수입니다.

시간 복잡도 목표: O(N) — 1초 단위로 전부 훑으면 총 경과 시간이 커서 제한 시간을 넘길 수 있습니다.

테스트 케이스

예시 1: 무게 제한(10)이 병목 → [3,5,6,8]
입력: railLength = 2, weightLimit = 10, slotLimit = 2, weights = [7,4,5,6]
출력: [3,5,6,8]
예시 2: 무게는 여유, 대수 제한(2)이 병목 → [5,6,9]
입력: railLength = 4, weightLimit = 100, slotLimit = 2, weights = [1,1,1]
출력: [5,6,9]
예시 3: 길이 1 레일, 올라간 다음 초에 바로 하차
입력: railLength = 1, weightLimit = 5, slotLimit = 3, weights = [5,5]
출력: [2,3]
로봇 1대 + 대수 제한 1 → 진입 즉시 5초 이동
입력: railLength = 5, weightLimit = 10, slotLimit = 1, weights = [10]
출력: [6]
제한이 모두 넉넉해 매 초 한 대씩 연속 진입
입력: railLength = 3, weightLimit = 100, slotLimit = 100, weights = [1,1,1,1]
출력: [4,5,6,7]
무게 제한이 딱 2대 분량 (경계값)
입력: railLength = 3, weightLimit = 6, slotLimit = 5, weights = [3,3,3,3]
출력: [4,5,7,8]
각 로봇 무게가 제한과 같아 항상 한 대씩만 진입
입력: railLength = 1, weightLimit = 7, slotLimit = 5, weights = [7,7,7]
출력: [2,3,4]
solution.ts
에디터 로딩 중…

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