11-1. 모험가 길드 Python3

Yelim Kim·2022년 9월 7일
0

Python Algorithm Interview

목록 보기
32/36
post-thumbnail

Problem

한 마을에 모험가가 N명 있습니다. 모험가 길드에서는 N명의 모험가를 대상으로 '공포도'를 측정했는데,'공포도'가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어집니다. 모험가 길드장인 동빈이는 모험가 그룹을 안전하게 구성하고자 공포도가 X인 모험가는 반드시 X명 이상으로구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했습니다. 동빈이는 최대 몇 개의 모험가 그룹을 만들 수 있는지 궁금합니다.
N명의 모험가에 대한 정보가 주어졌을 때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요.

예를 들어, N = 5이고, 각 모험가의 공포도가 다음과 같다고 가정합시다.

2 3 1 2 2

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

입출력 예제

input

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  

output

6

input

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

output

5

My code

N = int(input())
group = list(map(int,input().split()))
count = 0

group.sort()

while group:
    t = group[-1]
    group = group[:-t]
    count += 1

print(count)

Review

30분 문제여서 30분 잡고 했는데 뭔가 의외로 빨리 간단하게 풀림
구현하기에 어려운 느낌은 아니었는데
최댓값을 구해야 한다고 해서
1) 제일 작은 수 부터 시작해서 pop을 할지
2) 제일 큰 수부터 시작해서 pop을 할지 고민이었음

처음에는 작은 수 부터 하려고 했는데
이것저것 생각해보니까 큰 수부터 하는게 최대한 버리는 숫자도 적고 그래서 큰 수부터 줄여나가기로 함

숫자 그룹에 숫자가 남아 있다면
->
가장 큰 수a 부터 a개 만큼 pop을 하고 반복

답지는 내꺼 비슷하게 작은 수 부터 시작했음
음... 근데 결과가 같나?

또 다른 입출력 예제 찾아봤는데 맞게 동작하는걸로 봐서 내가 만든 코드도 맞는 것 같음.

profile
뜬금없지만 세계여행이 꿈입니다.

0개의 댓글