[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();
}
}