관리 메뉴

커리까지

모험가 길드 본문

알고리즘/풀이

모험가 길드

목표는 커리 2021. 1. 3. 19:30
728x90
SMALL

모험가 길드

  • 한 마을에 모험가 N명이 존재
  • 모험가 그룹은 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있다.
  • 최대 만들수 있는 그룹의 수는??

예시

  • N = 5
  • 각 모험가의 공포도
2 3 1 2 2

그룹 1에 공포다가 1,2,3인 모험가를 한 명씩 넣고, 그룹 2에 공포도가 2인 남은 두명을 넣게 되면, 총 2개의 그룹을 만들 수 있다. 또한 몇 명의 모험가는 마을에 그대로 남아 있어도 되기 때문에, 모든 모험가를 특정한 그룹에 넣을 필요는 없다.

입력조건

  • 첫째 줄에 모험가의 수 N이 주어진다. (1 <= N <= 100,000)
  • 둘째 줄에 각 모험가의 공포도의 값을 N 이하의 자연수로 주어지며, 각 자연수는 공백으로 구분한다.

출려조건

  • 여행을 떠날 수 있는 그룹 수의 최댓값을 출력한다.

입력 예시

5
2 3 1 2 2

출력 예시

2

내가 작성한 답안

n = int(input())
list_num = sorted(list(map(int,input().split())))
cnt = 0
while True:
    if len(list_num) != 0:
        start = list_num[0]
        li = list_num[0:start]
        if len(li) == start and len(li) >= li[-1]:
            cnt += 1
            list_num = list_num[start:]
        else:
            break
    elif len(list_num) == 0:
        break
print(cnt)
  1. 모험가의 수를 입력받는다.

  2. 공포도 값을 입력받아 정렬한다.

  3. 가장 값을 뽑고 그 숫자까지 인덱싱해서 길이랑 비교한다.

    1. 뽑힌 리스트에서 가장 큰 값이 뽑힌 리스트의 길이보다 작으면 1을 더한다.
  4. 리스트가 비어있거나 3-1이 아니면 while을 빠져나간다.

모범답안

n = int(input())
list_num = sorted(list(map(int,input().split())))
result = 0
cnt = 0

for i in list_num:
    cnt +=1
    if cnt >= i:
        result += 1
        cnt = 0
print(result)        

 

728x90
LIST

'알고리즘 > 풀이' 카테고리의 다른 글

백준 2583번 영역구하기  (0) 2021.01.10
백준 10870번 피보나치 수 5  (0) 2021.01.08
백준 9012번 괄호  (0) 2021.01.06
ACM 호텔  (0) 2021.01.05
ATM  (0) 2021.01.04
Comments