[이것이 코딩 테스트다] 그리디 - 모험가 길드

YEAh·2021년 3월 1일
0
post-thumbnail

그리디
현재 상황에서 지금 당장 좋은 것만 고르는 방법

✅ 문제

한 마을에 모험가가 N명 있습니다. 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했습니다.
N명의 모험가에 대한 정보가 주어졌을 때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요.

입력 예시

5
2 3 1 2 2

출력 예시

2


➕ 문제 해설

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)

📝 정리

나의 문제 접근의 문제점..

리스트를 정렬하고 공포도가 작은 사람부터 그룹을 만드는 것까지는 생각해 냈다.
모험도를 기준으로 현재 모험가의 수의 중간값을 가진 모험도의 인덱스의 위치를 찾아 모험도가 큰 사람들을 제거하여 리스트 범위를 줄여가는 방법으로 고민했었다. 모험도가 큰 사람들이 그룹을 이루는 경우 그룹의 수를 최대로 할 수 없으니까...
하지만 인원수와 모험도를 비교하는 것으로 쉽게 문제를 해결할 수 있었다.
내 생각엔 모험도로 접근하는 것이 아닌 인원수로 접근하는 것이 이 문제의 핵심이었던 것 같다.

profile
End up being.

0개의 댓글