← 실전 문제

종류별 묶음 포장

C++빈칸 채우기

물품을 같은 종류끼리 size개씩 묶어 포장해요. 서로 다른 종류를 한 묶음에 넣을 수 없고, size개보다 적게 남은 물품은 포장하지 않아요. kinds의 각 값은 물품 하나의 종류 번호예요.

int solution(vector<int> kinds, int m, int size)가 모든 묶음을 만든 뒤 포장하지 못한 물품의 총개수를 반환하도록 빈칸을 채워 주세요. collect는 종류별 물품 수를 구하고, measure는 한 종류에서 포장하지 못한 물품 수를 구해요.

매개변수와 반환값

  • kinds의 길이 n은 1 이상 500 이하예요.
  • 종류의 수 m은 1 이상 20 이하이고, 각 종류 번호는 1 이상 m 이하예요.
  • size는 1 이상 100 이하예요. 없는 종류도 있을 수 있어요.
  • 반환값은 포장하지 못한 물품 수의 합인 정수예요.

예시

  1. kinds = [1, 2, 1, 1, 2, 3, 1], m = 3, size = 3이면 4를 반환해요. 종류별로 4, 2, 1개가 있어 각각 1, 2, 1개가 남아요.
  2. kinds = [1, 1, 2, 2, 2, 2], m = 2, size = 2이면 0을 반환해요. 두 종류 모두 남는 물품 없이 포장돼요.

실행용 입출력

첫 줄에 n m size, 둘째 줄에 종류 번호 n개를 입력해요. main은 이 값으로 함수를 호출하고 반환값을 출력하는 하네스예요.

예시 입력

7 3 3
1 2 1 1 2 3 1

예상 결과

4

예시 입력

6 2 2
1 1 2 2 2 2

예상 결과

0
핵심 개념
  • counting-aggregation: 위치별 값으로 종류별 개수를 모아요.
  • function-design: 개수 수집과 한 종류 계산을 조합해요.
  • loops: 1부터 m까지의 종류 번호를 순회해요.
  • stl-vector: 주어진 벡터의 크기와 인덱스로 데이터를 읽어요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기