{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉연결 리스트〉컨베이어 상자 k묶음 뒤집기← 이전다음 →
#024 · 연결 리스트중간연결 리스트,그룹 역순

컨베이어 상자 k묶음 뒤집기

문제

물류 창고의 컨베이어 위에 상자들이 한 줄로 놓여 있습니다. 상자들은 단일 연결 리스트로 관리되며, head가 맨 앞 상자입니다. 각 노드의 val은 상자의 관리 번호입니다.

포장 로봇은 컨베이어를 앞에서부터 k개씩 묶어 처리하는데, 한 묶음을 집어 올린 뒤 그 묶음 안의 순서를 뒤집어 다시 내려놓습니다. 앞에서부터 묶음을 만들다가 마지막에 남은 상자가 k개보다 적으면, 그 조각은 뒤집지 않고 원래 순서 그대로 둡니다.

head와 k가 주어질 때, 로봇이 모든 처리를 마친 뒤 컨베이어의 상태를 나타내는 연결 리스트의 head를 반환하는 solution(head, k) 함수를 작성하세요.

예시

boxes k 결과
[7, 4, 9, 2, 5, 8] 3 [9, 4, 7, 8, 5, 2]
[3, 6, 1, 8, 2] 2 [6, 3, 8, 1, 2]
[2, 9] 5 [2, 9]

예시 1 설명: [7,4,9]와 [2,5,8] 두 묶음이 각각 뒤집혀 [9,4,7], [8,5,2]가 됩니다.

예시 2 설명: [3,6], [1,8]은 뒤집히고, 마지막에 남은 [2]는 2개가 되지 않으므로 그대로 둡니다.

예시 3 설명: 상자가 k개보다 적어 묶음을 하나도 만들 수 없으므로 순서가 바뀌지 않습니다.

제약 조건

  • 상자 개수 n: 0 ≤ n ≤ 100,000
  • 1 ≤ k ≤ 100,000
  • 0 ≤ Node.val ≤ 1,000,000
  • 노드를 새로 만들지 않고 링크 연결만 바꿔 푸는 것을 권장합니다.

시간 복잡도 목표: O(n)

테스트 케이스

예시 1: 3개씩 두 묶음이 모두 뒤집힘
입력: boxes = [7,4,9,2,5,8], k = 3
출력: [9,4,7,8,5,2]
예시 2: 마지막 1개는 그대로
입력: boxes = [3,6,1,8,2], k = 2
출력: [6,3,8,1,2]
예시 3: k가 상자 수보다 커서 변화 없음
입력: boxes = [2,9], k = 5
출력: [2,9]
k=1이면 순서가 바뀌지 않음
입력: boxes = [5,1,4], k = 1
출력: [5,1,4]
빈 컨베이어
입력: boxes = [], k = 3
출력: []
전체가 정확히 한 묶음
입력: boxes = [6,3,7,1], k = 4
출력: [1,7,3,6]
solution.ts
에디터 로딩 중…

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