Recent Posts
소소한 개발이야기
[백준 #13300번 JAVA] 방 배정 풀이 본문
📄 방 배정 [백준 13300번]
문제 풀이
문제는 2차원 배열을 이용해 해결하였습니다. 성별이 0, 1로 주어지는 점과 총 학년은 6학년 밖에 되지 않기 때문에 2차원 배열로 쉽게 해결할 수 있습니다. 먼저 문제의 조건을 살펴보겠습니다.
문제 조건
- 1학년부터 6학년 까지 학생들이 묵을 방을 배정한다.
- 남학생은 남학생끼리, 여학생은 여학생끼리 방을 배정한다.
- 한 방에는 같은 학년의 학생들만 배정해야 한다.
- 한 방에 수용할 수 있는 최대 인원수 K가 주어지며 한 방에 한 명만 배정하는 것도 가능하다.
- 모든 학생을 배정하기 위해 필요한 방의 최소 개수를 구하여라.
문제 접근
먼저 성별이 0, 1로 주어지기 때문에 2차원 배열을 만들어 0번째 행은 여학생, 1번째 행은 남학생으로 설정합니다. 또한, 각 열의 번호는 학년을 나타냄으로 성별과 학년을 쉽게 구분할 수 있게 만듭니다.
문제의 조건 중 같은 성별끼리 방을 사용할 수 있으며 학년 또한 나누어야 하기 때문에 2차원 배열을 탐색하며 방에 수용할 수 있는 최대 인원을 채우면서 필요한 방의 개수를 세어줍니다. 필요한 방의 최소 개수를 구하는 것이 목표이기 때문에 최대한 꽉 채워야지 최소의 방 개수를 구할 수 있습니다.
글보단 코드를 보면 더 이해하기 쉽습니다.
🌱 main 함수
public static void main(String[] args) throws IOException {
String[] input = br.readLine().split(" ");
int studentNum = Integer.parseInt(input[0]);
int capacity = Integer.parseInt(input[1]);
int[][] students = getStudents(studentNum);
System.out.println(solve(students, capacity));
}
🌱 solve 함수
private static int solve(int[][] students, int capacity) {
int roomCount = 0;
for (int i = 0; i < students.length; i++) {
for (int j = 1; j < students[0].length; j++) {
if (students[i][j] != 0) roomCount += calcNeedRoom(students[i][j], capacity);
}
}
return roomCount;
}
🌱 calcNeedRoom 함수
private static int calcNeedRoom(int numberOfStudent, int capacity) {
return numberOfStudent % capacity == 0 ? numberOfStudent / capacity : (numberOfStudent / capacity) + 1;
}
🌱 getStudents 함수
private static int[][] getStudents(int studentNum) throws IOException {
int[][] temp = new int[2][7];
for (int i = 0; i < studentNum; i++) {
String[] input = br.readLine().split(" ");
int sex = Integer.parseInt(input[0]);
int grade = Integer.parseInt(input[1]);
temp[sex][grade] += 1;
}
return temp;
}
💡 Github에 더 많은 문제 풀이가 있습니다.
'BOJ' 카테고리의 다른 글
[백준 #2437번 JAVA] 저울 풀이 (0) | 2019.07.12 |
---|---|
[백준 #2851번 JAVA] 슈퍼 마리오 풀이 (0) | 2019.07.10 |
[백준 #1436번 JAVA] 영화감독 숌 풀이 (0) | 2019.07.09 |
[백준 #2576번 JAVA] 홀수 풀이 (0) | 2019.07.09 |
[백준 #11728번 JAVA] 배열 합치기 풀이 (0) | 2019.07.09 |
Comments