N명의 모험가에 대한 정보가 주어졌을 때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요.
예를 들어, N = 5이고, 각 모험가의 공포도가 다음과 같다고 가정합시다.
2 3 1 2 2
이 경우 그룹 1에 공포도가 1,2,3인 모험가를 한 명씩 넣고, 그룹 2에 공포도가 2인 남은 두 명을 넣게 되면 총 2개의 그룹을 만들 수 있습니다. 또한 몇 명의 모험가는 마을에 그대로 남아 있어도 되기 때문에, 모든 모험가를 특정한 그룹에 넣을 필요는 없습니다.
n = int(input())
data = list(map(int, input().split()))
data.sort()
group = 0
member = 0
for x in data:
member += 1
if member >= x:
group += 1
member = 0
print(group)
💡 오름차순 정렬하여 최소한의 모험가 수만 포함하여 그룹 결성
공포도를 오름차순으로 정렬한 뒤, 현재 모험가의 공포도와 멤버의 수가 동일하거나, 멤버가 더 많다면 그룹을 결성한다.
모험가 길드의 공포도가 다음과 같다면 [2 1], 첫 번째 반복시 멤버는 1, 공포도는 2이므로 그룹이 결성되지 않는다. 두 번째 반복시 멤버는 2, 공포도는 1이므로 공포도에 비해 멤버 수가 더 많으므로 그룹이 결성된다.