- counter로 각 그룹에 속한 원소 개수 세어준 다음 그룹명으로 오름차순 정렬
- rest = 0으로 초기화 : 그룹화하고 남은 사람 수 저장할 공간
- count에 담긴 값들을 하나씩 pop하면서 그룹명보다 '원소 개수+rest'가 크면 '(원소 수 + rest)/그룹 명'한 몫을 answer(=구성된 그룹)에 더해주고 남은 사람은 rest에 저장
- 반대의 경우 rest에 원소 개수 저장
- count를 모두 순회할 때까지 반복
from collections import Counter
N = int(input())
A = list(map(int, input().split()))
count = Counter(A)
count = sorted(count.items(), key=lambda x : x[0])
answer = 0
rest = 0
while(count):
(n, i) = count.pop(0)
if(n <= i+rest):
answer += (i+rest) // n
rest = (i+rest) % n
else:
rest += i
print(answer)
이코테 해설
- 공포도가 낮은 것부터 하나씩 확인하며 현재 그룹에 해당 모험가를 포함시키기
- 현재 그룹에 포함된 모험가 수가 현재의 공포도 이상이면 그룹 결성
- 총 그룹 수 증가시키기
- 현재 그룹에 포함된 모험가 수 초기화
N = int(input())
A = list(map(int, input().split()))
A.sort()
answer = 0
count = 0
for i in A:
count += 1
if count >= i:
answer += 1
count = 0
print(answer)
'◦ Algorithm > Python' 카테고리의 다른 글
백준 뒤집기 1439 그리디 (0) | 2023.03.23 |
---|---|
이코테 그리디 곱하기 혹은 더하기 (0) | 2023.03.23 |
이코테 그리디 1이 될 때까지 (0) | 2023.03.22 |
이코테 그리디 숫자 카드 게임 (0) | 2023.03.22 |
이코테 그리디 큰 수의 법칙 (0) | 2023.03.22 |