모험가 N명이 있다. N명은 '공포도'가 각각 다르다. 공포도가 x인 모험가는 반드시 x명 이상으로 구성한 모험가 그룹에 참여해야 한다. 최대 몇 개의 그룹을 만들 수 있는가?
<제한 사항>
시간 제한 : 1 sec
메모리 제한 : 128 MB
<입력>
첫째 줄에 n이 주어진다. (1 <= n <= 100000)
두 번째 줄에 각 n명의 공포도가 공백으로 구분하여 주어진다.
<출력>
최대 만들 수 있는 그룹 수.
<예시>
27
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7
6
5
2 3 1 2 2
2
20
1 2 2 3 3 3 4 4 4 5 5 5 5 6 6 6 6 6 6
5
n = 100000일 때 -> 성공
n = int(input())
arr = map(int, input().split())
result = 0
arr = sorted(arr, reverse=True)
cnt = 0
while arr:
temp = arr.pop()
if temp == 1:
result += 1
continue
else:
if temp > len(arr) + 1 + cnt:
break
if temp <= temp:
cnt += 1
if temp == cnt:
result += 1
cnt = 0
print(result)
n = int(input())
data = list(map(int, input().split()))
data.sort()
result = 0
count = 0
for i in data:
count += 1
if count >= i:
result += 1
count = 0
print(result)
나의 풀이도 생각해내느라 꽤 오래 걸렸는데, 책 풀이와 비교하니 훨씬 간결하고 명확하다. 조금 더 단련해야겠다.
출처 : 이것이 취업을 위한 코딩테스트다 with 파이썬 - 나동빈