BOJ_13300_방배정_JAVA
문제 : 방배정
링크 : BOJ_13300_방배정
접근 방식
성별과 학년을 그룹화 시킬 2차원배열을 생성하고, 그 그룹화된 배열에 들어오는 학생들을 카운트시켜 그룹별 인원수를 먼저 찾아낸다.
그 후, 한 방에 넣을 수 있는 인원(K라고 하겠다.)으로 학생들을 나누는데, 학생이 K로 나누어 떨어진다면, 학생 수/K 만큼의 방을 주면 되고, 학생이 K로 나누어 떨어지지 않는다면 기존 학생수/K의 방 개수에서 1을 더해주어야 한다.
풀이 방법
-
학생을 그룹화시킬 2차원 배열을 생성한다.
-
학생 정보를 읽어들여 2차원 배열에 카운트 시킨다. 학년, 성별로 구분하여 배열에 누적시킨다.
-
방 개수를 누적시킬 변수를 생성한다.
-
2차원 배열의 각 그룹을 순회하며 조건에 따라 학생 수/K 또는 학생 수/K+1 의 값을 방 개수에 계속해서 더해준다.
-
최종적으로 구해진 방 개수를 출력한다.
소스 코드
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);
}
}