문제 정의
입력 조건
출력 조건
입출력 예시
# 입력
2 3 1 2 2
#출력
2
로직
1. 최대한 많은 그룹을 만들어야하기 때문에 공포도가 낮은 순으로 정렬한다.
2. 맨 앞에서부터 차례대로 공포도와 그룹에 포함된 모험가 수를 확인하면서 그룹을 확정한다.
내가 짠 코드
prob = list(map(int, input().split()))
n = len(prob)
# 오름차순 정렬
prob_asc = sorted(prob, reverse=False)
mx = 0 # 그룹 내 최고 공포도
cnt_ppl = 0 # 그룹 내 모험가 수
result = 0 # 그룹 개수
for p in ans: # p : 모험가의 공포도
cnt_ppl += 1 # 그룹에 모험가 추가
if p > mx: # 그룹 내 최고 공포도 할당
mx = p
if cnt_ppl >= mx: # 그룹 내 최고 공포도가 모험가 수 이상인 경우 그룹 확정
result += 1
cnt_ppl = 0
mx = 0
print(result)
개선 코드
공포도를 오름차순으로 정렬했기 때문에 그룹 내 최고 공포도는 필요가 없었다.
prob = list(map(int, input().split()))
n = len(prob)
# 오름차순 정렬
prob_asc = sorted(prob, reverse=False)
cnt_ppl = 0 # 그룹 내 모험가 수
result = 0 # 그룹 개수
for p in ans: # p : 모험가의 공포도
cnt_ppl += 1 # 그룹에 모험가 1명 추가
if cnt_ppl >= p: # 현재 공포도가 그룹 내 모험가 수 이상인 경우 그룹 확정
result += 1
cnt_ppl = 0
print(result)