본문으로 바로가기


[  이것이 취업을 위한 코딩테스트다 with 파이썬  ]


모험가 길드_ Python 파이썬


 

" 문제 "

 

 

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

 

<입력 조건>
- 첫째 줄에 모험가의 수 N 이 주어집니다. (1 <= N <= 100,000)
- 둘째 줄에 각 모험가의 공포도의 값을 N이하의 자연수로 주어지며, 각 자연수는 공백으로 구분합니다.

 

<출력 조건>
- 여행을 떠날 수 있는 그룹 수의 최댓값을 출력합니다.

 

" 아이디어 "

공포도를 입력받은 travler 리스트를 오름차순으로 정리한 후,

공포도가 낮은 모험가부터 차례대로 그룹에 포함시키고, 그룹에 속한 마지막 모험가의 공포도를 기준으로 팀원 수를 만족시키면 그대로 해당 팀 구성을 마치고 다음 그룹을 구성한다.

 

예를들어 [ 2, 3, 1, 2, 2 ] 를 오름차순으로 정렬하여 [ 1, 2, 2, 2, 3 ] 로 만든다.

처음 모험가는 1이므로 단일 팀을 구성할 수 있게 된다.

다음팀원은 공포도가 2이므로 그 다음팀원까지 포함하여 [ 2, 2 ] 의 팀을 구성하게 된다.

마지막 남은 [ 2, 3 ] 은 3 때문에 팀을 구성할 수 없다.

이런 식으로 가장 공포도가 낮은 모험가부터 그룹을 결성하면, 최대한 많은 그룹을 결성할 수 있다.

 




" 코드 "

1
2
3
4
5
6
7
8
9
10
11
12
= int(input())
travler = list(map(int, input().split()))
travler.sort()
 
cnt = sum = 0
for t in travler:
  sum += 1
  if sum == t:
    cnt += 1
    sum = 0
 
print(cnt)
cs



" 참고자료 "

 

 

 

반응형