모험가 길드

INGBEEN·2021년 10월 30일
0

알고리즘 문제

목록 보기
2/20

문제 설명

모험가 N명이 있다. N명은 '공포도'가 각각 다르다. 공포도가 x인 모험가는 반드시 x명 이상으로 구성한 모험가 그룹에 참여해야 한다. 최대 몇 개의 그룹을 만들 수 있는가?

<제한 사항>
시간 제한 : 1 sec
메모리 제한 : 128 MB

<입력>
첫째 줄에 n이 주어진다. (1 <= n <= 100000)
두 번째 줄에 각 n명의 공포도가 공백으로 구분하여 주어진다.

<출력>
최대 만들 수 있는 그룹 수.

<예시>
27
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7
6

5
2 3 1 2 2
2

20
1 2 2 3 3 3 4 4 4 5 5 5 5 6 6 6 6 6 6
5


나의 풀이

n = 100000일 때 -> 성공

n = int(input())
arr = map(int, input().split())
result = 0

arr = sorted(arr, reverse=True)
cnt = 0

while arr:
    temp = arr.pop()
    if temp == 1:
        result += 1
        continue
    else:
        if temp > len(arr) + 1 + cnt:
            break
        if temp <= temp:
            cnt += 1    
            if temp == cnt:
                result += 1
                cnt = 0
print(result)

책 풀이

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)

느낀 점

나의 풀이도 생각해내느라 꽤 오래 걸렸는데, 책 풀이와 비교하니 훨씬 간결하고 명확하다. 조금 더 단련해야겠다.

출처 : 이것이 취업을 위한 코딩테스트다 with 파이썬 - 나동빈

profile
No Excuses

0개의 댓글

관련 채용 정보