문제
공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 함
만들 수 있는 모험가 그룹의 최대 개수 구하기
입력 조건
첫째 줄에 모험가의 수 N이 주어짐 (1<=N<=100,000)
둘째 줄에 각 모험가의 공포도의 값이 N 이하의 자연수로 주어짐, 공백으로 구분
출력 조건
여행을 떠날 수 있는 그룹 수의 최댓값 출력
입력 예시 | 출력 예시 |
5 2 3 1 2 2 |
2 |
풀이
입력받은 배열 n을 오름차순으로 정렬함
-> 공포도가 작은 순서대로 정렬돼서 현재의 공포도와 현재의 인원수만 비교해서 해결 가능해짐
count : 현재 그룹의 인원수
count가 n[i](공포도, 현재 그룹이 가져야 하는 최소 인원수) 이상이면 그룹 생성 가능
-> 값 갱신해주기 (count는 0으로, answer ++)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int n[100001];
int main() {
int N;
int i;
int answer = 0;
int count = 0;
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &n[i]);
}
sort(n, n + N);
for (i = 0; i < N; i++) {
count++;
if (count >= n[i]) {
answer++;
count = 0;
}
}
printf("%d", answer);
return 0;
}