/ BOJ

BOJ_13300_방배정_JAVA

문제 : 방배정

링크 : BOJ_13300_방배정

접근 방식

성별과 학년을 그룹화 시킬 2차원배열을 생성하고, 그 그룹화된 배열에 들어오는 학생들을 카운트시켜 그룹별 인원수를 먼저 찾아낸다.

그 후, 한 방에 넣을 수 있는 인원(K라고 하겠다.)으로 학생들을 나누는데, 학생이 K로 나누어 떨어진다면, 학생 수/K 만큼의 방을 주면 되고, 학생이 K로 나누어 떨어지지 않는다면 기존 학생수/K의 방 개수에서 1을 더해주어야 한다.

풀이 방법

  1. 학생을 그룹화시킬 2차원 배열을 생성한다.

  2. 학생 정보를 읽어들여 2차원 배열에 카운트 시킨다. 학년, 성별로 구분하여 배열에 누적시킨다.

  3. 방 개수를 누적시킬 변수를 생성한다.

  4. 2차원 배열의 각 그룹을 순회하며 조건에 따라 학생 수/K 또는 학생 수/K+1 의 값을 방 개수에 계속해서 더해준다.

  5. 최종적으로 구해진 방 개수를 출력한다.

소스 코드


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

public class BOJ_13300_방배정 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(in.readLine()," ");

		int N = Integer.parseInt(st.nextToken());

		int K = Integer.parseInt(st.nextToken());

		int[][] arr = new int[6][2];

		for(int i=0;i<N;i++) {
			st = new StringTokenizer(in.readLine()," ");
			int gender = Integer.parseInt(st.nextToken());
			int level = Integer.parseInt(st.nextToken());
			if(gender == 0) {
				arr[level-1][gender]++;
			}else {
				arr[level-1][gender]++;
			}
		}
		int roomCnt = 0;
		for(int i=0;i<6;i++) {
//			System.out.println(Arrays.toString(arr[i]));
			if(arr[i][0] != 0) {
				if(arr[i][0] % K == 0) {
					roomCnt += arr[i][0]/K;
				}else {
					roomCnt += arr[i][0]/K + 1;
				}
			}
			if(arr[i][1]!= 0) {
				if(arr[i][1] % K == 0) {
					roomCnt += arr[i][1]/K;
				}else {
					roomCnt +=arr[i][1]/K + 1;
				}
			}
		}

		System.out.println(roomCnt);

	}

}