곽로그

[백준 13300, Java] 방 배정 본문

알고리즘/백준

[백준 13300, Java] 방 배정

일도이동 2020. 12. 23. 11:08
반응형

문제

www.acmicpc.net/problem/13300

 

13300번: 방 배정

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어

www.acmicpc.net

 

풀이

 2차원 배열을 활용하면 쉽게 풀 수 있다. 문제 예시에 나와 있는 것 처럼 studentArray[n][m] ( 학년이 n학년이고 성별이 m인 학생의 수)인 2차원 배열을 선언한 뒤 배열을 순회하면서 각 학생수를 K로 나눈 몫과 나머지를 구한다. n학년이고 성별이 m인 학생들이 필요한 방의 갯수는, n학년이고 성별이 m인 총 학생수를 K로 나눈 몫을 구한다. 이때 나머지가 0보다 크면 1개의 방이 더 필요하다. 

 

코드

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

public class Mainb {
    public static int N;
    public static int K;
    public static int[][] studentsArray;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine()," ");
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        studentsArray = new int[7][2]; // studentArray[n][m] : n학년 이고 성별이 m인 학생의 수
        for(int count=0; count<N; count++ ){
            st = new StringTokenizer(br.readLine()," ");

            int gender = Integer.parseInt(st.nextToken());
            int year = Integer.parseInt(st.nextToken());
            ++studentsArray[year][gender];
        }

        int result = getRoomcount();
        bw.write(String.valueOf(result));
        bw.flush();

        br.close();
        bw.close();



        /*
            방배정
            목표 : 한 방에 배정할 수 있는 최대 인원 수 K 가 주어졌을 때, 조건에 맞게 모든 학생을 배정하기 위해
            필요한 방의 최소 개수

            조건: 성별 같게/ 같은학년끼리
         */
    }
    public static int getRoomcount(){
        int roomCount = 0;
        for(int year = 1; year<=6; year++){
            for(int gender  = 0; gender<=1; gender++){
                int numberOfStudent = studentsArray[year][gender];

                roomCount += numberOfStudent/K;
                roomCount += (numberOfStudent%K==0)? 0 : 1;
            }
        }

        return roomCount;
    }
}
반응형
Comments