CodingTest/그리디 알고리즘

모험가 길드

seongduck 2022. 7. 5. 15:43

1. 문제설명

출처 : 이코테2021

 

 

2. 문제 조건

 

3. 문제해결 아이디어

  1. 오름차순 정렬 이후에 공포도가 가장 낮은 모험가부터 하나씩 확인한다.
  2. 공포도를 하나씩 확인하며 "현재 그룹에 포함된 모험가의 수"가 "현재 확인하고 있는 공포도보다 크거나 같다면 이를 그룹으로 설정"

 

4. 답안

#모험가의 수
n = int(input())
promulgate = list(map(int, input().split()))
answer = 0
people = 1

#올림차순 정렬
promulgate = sorted(promulgate)

for i in range(n):
    if(promulgate[i] <= people): #공포도와 인원수가 같을 경우
        answer += 1 #팀 결성
        people = 1 #다시 초기화
    else:
        people += 1 #한명추가
print(answer)

 

4-1. 표준답안

n = int(input())
data = list(map(int, input().split()))
data.sort()

result = 0 #총 그룹의 수
count = 0 #현재 그룹에 포함된 모험가의 수

for i in data: #공포도를 낮은 것 부터 하나씩 확인하며
    count += 1 #현재 그룹에 해당 모험가를 포함시키기
    if count >= i: #현재 그룹에 포함된 모험가의 수가 현재의 공포도 이상일 때
        result += 1
        count = 0
print(result)

'CodingTest > 그리디 알고리즘' 카테고리의 다른 글

곱하기 혹은 더하기  (0) 2022.07.05
1이 될 때까지 반복적으로 수행  (0) 2022.07.05
그리디 알고리즘 이론  (0) 2022.07.04