• 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)

+ Recent posts