모든 챌린지
쉬움 0명 해결 정답률 0%

리스트를 청크로 나누기

고정된 크기의 연속된 그룹으로 리스트를 자르고, 필요하면 마지막 그룹은 더 짧게 둡니다.

배우게 될 내용

  • 일정한 간격으로 리스트 훑기
  • 마지막만 짧을 수 있는 슬라이스 만들기
  • 페이지 나누기나 배치 처리를 위해 데이터 묶기

문제

원문 보기 (영어)

고정 크기 청크로 데이터를 나누는 일은 프로그램이 결과를 페이지로 나누거나, 데이터베이스 쓰기를 배치로 처리하거나, 패킷으로 전송할 때 사용됩니다.

리스트와 청크 크기가 주어질 때, 리스트를 순서대로 정확히 size개의 값으로 이루어진 연속된 청크들로 자르세요. 마지막 청크에는 남은 값이 모두 들어가며, 더 짧을 수 있습니다.

split_into_chunks(values, size)를 구현하세요.

입력

values: 나눌 리스트입니다.

size: 청크 크기입니다.

출력

청크들의 리스트를 반환하세요. 빈 리스트라면 청크도 없습니다.

제약 조건

0 ≤ 값의 수 ≤ 10,000

1 ≤ size ≤ 10,000

예시

예시 1
입력:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]

예상 출력:
expected = [
    [1, 2, 3],
    [4, 5, 6],
    [7]
]
입력:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};

예상 출력:
std::vector<std::vector<long long>> expected = {
    {1, 2, 3},
    {4, 5, 6},
    {7}
};
입력:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};

예상 출력:
long[][] expected = new long[][] {
    new long[] {1, 2, 3},
    new long[] {4, 5, 6},
    new long[] {7}
};

설명

3개씩 묶으면 [1, 2, 3]과 [4, 5, 6]이 되고, 남은 7은 마지막의 더 짧은 청크를 이룹니다.

예시 2
입력:
size = 5
values = [8, 9]

예상 출력:
expected = [
    [8, 9]
]
입력:
long long size = 5;
std::vector<long long> values = {8, 9};

예상 출력:
std::vector<std::vector<long long>> expected = {
    {8, 9}
};
입력:
long size = 5;
long[] values = new long[] {8, 9};

예상 출력:
long[][] expected = new long[][] {
    new long[] {8, 9}
};

설명

size가 리스트보다 크므로 모든 값이 한 청크에 들어갑니다: [[8, 9]].

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

시작 위치는 0, size, 2·size, …입니다.

힌트 2

각 시작 위치에서 start + size까지 슬라이스하세요.

힌트 3

마지막 슬라이스는 짧을 수 있고, 빈 리스트에서는 청크가 생기지 않습니다.

예상 복잡도

시간 O(n), 추가 공간 O(n)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.