문제 링크는 다음과 같다.
https://www.acmicpc.net/problem/13300
13300번: 방 배정
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어 주어진다. 다음 N 개의 각 줄에는 학생의 성별 S와 학년 Y(1 ≤ Y ≤ 6)가 공백으로 분리되어 주어진다. 성별 S는 0, 1중 하나로서 여학생인 경우에 0, 남학생인 경우에 1로 나타낸다.
www.acmicpc.net
예시로 주어지는 학생 정보
위와 같은 예시를 보면, 쉽게 이차원 배열을 사용해야겠다는 생각을 떠올릴 수 있다.
특정 학년의 특정 성별을 가지는 학생의 수를 그대로 배열에 저장해준다.
k보다 인원이 작으면 방은 1개만 있으면 되고, 그 이상일 경우 k로 나눈 몫 + 1개만큼 방이 필요하다.
#include<iostream>
using namespace std;
int arr[2][7];
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int n, k;
cin >> n >> k;
int s, y;
while (n--) { //n명의 정보를 2차원 배열에 저장
cin >> s >> y;
arr[s][y]++;
}
int room = 0;
for (int i = 0; i < 2; i++) {
for (int j = 1; j <= 6; j++) {
if (!arr[i][j]) //특정 학년과 성별의 학생수가 0이면 continue
continue;
if (arr[i][j] < k) // k보다 작으므로 방은 하나만 있으면 됨
room++;
else { //k보다 크거나 같을 때
if (arr[i][j] % k == 0) {
//k로 나눠 떨어질 때
room = room + arr[i][j] / k;
}
else {
room = room + arr[i][j] / k + 1;
}
}
}
}
cout << room << '\n';
return 0;
}