https://www.acmicpc.net/problem/16200
1. 아이디어
카운팅 배열을 활용해서 X명 이하로 팀을 구성해야 하는 사람들의 수를 인덱스에 맞춰서 넣어줬다. 이후 몫 연산으로 해당 그룹의 개수를 알아내고 나머지 인원은 더 많은 사람이 팀에 구성되도 되는 사람과 팀을 이루어줬다.
2. 문제풀이
X명 이하로 팀을 이뤄야하는 사람 수가 N일 때 해당 인원수로 N/X의 팀을 구성할 수 있고 남은 인원이 있으면 X+1명 이하로 팀을 이뤄야하는 사람과 합쳐서 한 팀을 만드는 방식으로 구현했다. 이때 X+1명 이하로 팀을 이뤄야하는 사람 수가 이것 때문에 음수 처리가 될 수 있어서 음수인 사람 수는 다음 그룹에 넘기는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] cntArr = new int[1 + N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int X = Integer.parseInt(st.nextToken());
cntArr[X]++;
}
int ans = 0;
for (int i = 1; i <= N; i++) {
if (cntArr[i] < 0) {
cntArr[i + 1] += cntArr[i];
cntArr[i] = 0;
continue;
}
int q = cntArr[i] / i;
int r = cntArr[i] % i;
ans += q;
if (r != 0) {
cntArr[i + 1] -= i - r;
ans++;
}
}
System.out.println(ans);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 6593번 - 상범 빌딩 [Java] (0) | 2025.01.23 |
---|---|
[백준] 15595번 - 정답 비율 계산하기 [Java] (0) | 2025.01.22 |
[백준] 29198번 - 이번에는 C번이 문자열 [Java] (0) | 2025.01.22 |
[백준] 28094번 - 기말고사 작품 전시 [Java] (0) | 2025.01.22 |
[백준] 23797번 - 개구리 [Java] (0) | 2025.01.22 |