(중요)(Tip) 그리디 문제의 경우, 문제에서 반드시 순차적으로 처리해야한다같은 내용 없으면 정렬(오름차순/내림차순)하는게 유리할 때도 있음을 알아두자
그리고 본 문제에선 "최대 몇 개의 모험가 그룹을 만들 수 있느냐"가 핵심이기 때문에, 그룹에 들어오는 사람을 최소 인원으로 맞춰줘야 답이 나온다
''' 내가 푼 - 처음 시도 (잘못된 답-이유 : 입력된 순서 그대로 구성하는줄 앎) '''
def sol(n,arr):
answer = 0
group_size = 0
for i in range(n):
print(group_size)
if arr[i] == 1:
group_size += 1
elif group_size <= arr[i]:
group_size += 1
else:
group_size = 0
answer +=1
return answer
n = int(input())
arr = list(map(int, input().split()))
print(sol(n, arr))
''' 내가 푼 - 추가 테스트 케이스 보려다가 문제해결 아이디어 보고 푼 (정렬 사용) '''
def sol(n,arr):
answer = 0
group_size = 0
for i in arr:
if i == 1:
group_size = 0
answer +=1
print('---------')
elif group_size < i:
group_size += 1
else: # ( group_size >= i)
group_size = 0
answer +=1
print('---------')
print(i, ' ', group_size, ' ', answer)
return answer
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
print(sol(n, arr))
''' 동빈나 - 솔루션 '''
def sol(n,arr):
answer = 0
group_size = 0
for i in arr:
group_size += 1
if group_size >= i:
answer += 1
group_size = 0
return answer
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
print(sol(n, arr))