백준
백준13300 - 방 배정
개발하는꼬마
2019. 8. 18. 23:59
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
남자와 여자가 따로 방을 나누는데 같은 학년끼리 나누어야 하는 문제다. 이차원 백터를 이용하여 풀었다. 6학년까지 있어서 7개를 잡았다(1학년부터 6학년까지).
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, K; //N은 사람 수, K는 최대 인원 수
int cnt = 0; //방의 갯수
vector<int> v1[7]; //남자
vector<int> v2[7]; //여자
cin >> N >> K;
for (int i = 0; i < N; i++) {
int a, b;
cin >> a >> b;
if (a == 0) { //남자면
v1[b].push_back(1); //남자방, b학년에 삽입
}
else { //여자면
v2[b].push_back(1); //여자방, b학년에 삽입
}
}
for (int i = 1; i <= 6; i++) {
cnt = cnt + (v1[i].size() / K + v2[i].size() / K ); //남자 i 학년이 최대로 방 나눈 것 + 여자 i 학년이 최대로 방 나눈 것
if (v1[i].size() % K != 0) { //i학년 남자방 나머지 인원이 있으면
cnt++; //방의 수 증가
}
if (v2[i].size() % K != 0) { //i학년 여자방 나머지 인원이 있으면
cnt++; //방의 수 증가
}
}
cout << cnt;
}