출처 : https://www.acmicpc.net/problem/13300
여러 학년이 같은 장소로 수학여행을 가려고 하는데 1학년부터 6학년까지 학생들이 묵을 방을 배정해야 한다. 한 방에 배정할 수 있는 최대 인원 수 K가 주어졌을 때, 조건에 맞게 모든 학생을 배정하기 위해 필요한 방의 최소 개수를 구하는 프로그램을 작성하시오.
여성,남성끼리 따로 모아놓고 각 학년별로 배열에 담아놓으면 된다. 1학년 -> 1번 인덱스, 2학년 ->2번 인덱스와 같이하고, 방 개수를 계산해주면 된다. 방의 개수를 계산하는 방법은 아래처럼 풀었다. 정원이 K명일때 , {전체인원수 + (K-1)} / K
를 하게되면 방의 갯수가 나온다.
예를들어, 정원이 6명인 방이 있고, 전체 9명이 있다면, 방은 2개가 하다는게 직관적으로 구할 수 있다. 이는 올림수를 이용할 수도 있지만(1.xxx가 나온다면, 2로 취급), 나눗셈의 성질을 이용할 수 있다. 전체인원 수 + (K-1)을 해준다는 의미는 K명으로 나눌 때 , 나머지가 있다면 몫을 +1해주겠다는 의미이다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int girls[7] = {};
int boys[7] = {};
int N, K;
int Gender, Grade, Rooms = 0;
cin >> N >> K;
for (int i = 0; i < N; i++)
{
cin >> Gender >> Grade;
if (Gender)
{
boys[Grade]++;
continue;
}
girls[Grade]++;
}
for (int i = 1; i < 8; i++)
{
Rooms += (boys[i] + (K - 1)) / K;
Rooms += (girls[i] + (K - 1)) / K;
}
cout << Rooms << '\n';
return 0;
}