모험가 길드
- 한 마을에 모험가 N명이 존재
- 모험가 그룹은 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있다.
- 최대 만들수 있는 그룹의 수는??
예시
- N = 5
- 각 모험가의 공포도
2 3 1 2 2
그룹 1에 공포다가 1,2,3인 모험가를 한 명씩 넣고, 그룹 2에 공포도가 2인 남은 두명을 넣게 되면, 총 2개의 그룹을 만들 수 있다. 또한 몇 명의 모험가는 마을에 그대로 남아 있어도 되기 때문에, 모든 모험가를 특정한 그룹에 넣을 필요는 없다.
입력조건
- 첫째 줄에 모험가의 수 N이 주어진다. (1 <= N <= 100,000)
- 둘째 줄에 각 모험가의 공포도의 값을 N 이하의 자연수로 주어지며, 각 자연수는 공백으로 구분한다.
출려조건
- 여행을 떠날 수 있는 그룹 수의 최댓값을 출력한다.
입력 예시
5
2 3 1 2 2
출력 예시
2
내가 작성한 답안
n = int(input())
list_num = sorted(list(map(int,input().split())))
cnt = 0
while True:
if len(list_num) != 0:
start = list_num[0]
li = list_num[0:start]
if len(li) == start and len(li) >= li[-1]:
cnt += 1
list_num = list_num[start:]
else:
break
elif len(list_num) == 0:
break
print(cnt)
모험가의 수를 입력받는다.
공포도 값을 입력받아 정렬한다.
가장 값을 뽑고 그 숫자까지 인덱싱해서 길이랑 비교한다.
- 뽑힌 리스트에서 가장 큰 값이 뽑힌 리스트의 길이보다 작으면 1을 더한다.
리스트가 비어있거나 3-1이 아니면 while을 빠져나간다.
모범답안
n = int(input())
list_num = sorted(list(map(int,input().split())))
result = 0
cnt = 0
for i in list_num:
cnt +=1
if cnt >= i:
result += 1
cnt = 0
print(result)