[BOJ 13300] 방 배정

업데이트:

문제

  • BOJ 13300
  • 문제의 저작권은 Baekjoon Online Judge에 있습니다.

접근방식

2차원 배열을 만들어서 첫번째 인덱스 배열의 크기는 7로 지정하고 1학년~6학년인 학생의 정보를 담는다. 두번째 인덱 배열의 크기는 2로 지정하고 여학생일때 0, 남학생일 때 1에 학생 수를 담는다. 그리고 나서 for문을 돌면서 배열에 저장된 학생 수가 K보다 작으면 방 개수를 1개 늘리고, K보다 클 경우 K로 나누어 떨어지면 그 몫만큼 방 개수를 늘리고 K로 나누어 떨어지지 않는 경우 K로 나눈 몫+1만큼 방 개수를 늘린다.

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	
	static int Ans; //필요한 방 수
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken()); //학생 수
		int K = Integer.parseInt(st.nextToken()); //최대 인원 수
		
		int[][] grades = new int[7][2]; //1학년~6학년, 여:0 남:1
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine()); //성별 학년
			int gender = Integer.parseInt(st.nextToken());
			int grade = Integer.parseInt(st.nextToken());
			grades[grade][gender]++;
		}
		
		//전체 학년 돌면서 필요한 방개수 계산
		for(int i=1; i<=6; i++) {
			for(int j=0; j<=1; j++) {
				int num = grades[i][j]; //학생 수
				if(num>0 && num <= K) Ans++;
				else if(num % K == 0) Ans += num / K;
				else Ans += (num / K) + 1;
			}
		}
		
		bw.write(Ans+"");
		br.close();
		bw.flush();
		bw.close();
	}
}

카테고리:

업데이트: