© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 13304 - 방 배정

2024-12-03
BOJ
브론즈 II
cpp
원본 문제 보기
수학
구현

문제

BOJ 13304 - 방 배정

학생들을 성별과 학년 기준으로 그룹으로 나눈 뒤, 각 그룹에서 K명씩 한 방에 배정할 때 필요한 최소 방 수를 구하라.

입력

학생 수 N과 방 최대 인원 K, 이후 각 학생의 성별과 학년이 주어진다.

출력

필요한 최소 방 수를 출력한다.

예제

입력출력
3 2 0 1 1 3 0 43

풀이

학생을 5개 그룹으로 분류하고, 각 그룹별 방 수를 올림 나눗셈으로 구한다.

  1. 학년과 성별에 따라 5개 그룹(저학년, 남고, 여고, 남대, 여대)으로 분류한다
  2. 각 그룹의 인원을 K로 나누어 올림한다
  3. 모든 그룹의 방 수를 합산하여 출력한다

핵심 아이디어: 같은 그룹끼리만 같은 방을 쓸 수 있으므로, 그룹별로 독립적으로 방 수를 계산하면 된다.

코드

#include <iostream>
using namespace std;
 
int n, k, q, w, a[5];
int main()
{
  cin >> n >> k;
  while (n--)
  {
    cin >> q >> w;
    if (w < 3)
      a[0]++;
    else if (w < 5)
      if (q)
        a[1]++;
      else
        a[2]++;
    else if (q)
      a[3]++;
    else
      a[4]++;
  }
  for (q = 0, w = 0; q < 5; q++)
    w += a[q] / k + (a[q] % k ? 1 : 0);
  cout << w << endl;
}

복잡도

  • 시간: O(N)
  • 공간: O(1)