[이코테] 그리디 문제 풀이 - 모험가 길드

Gorae·2021년 5월 28일
0

알고리즘

목록 보기
1/19
post-thumbnail
본 내용은 나동빈 님의 ‘이것이 취업을 위한 코딩 테스트다 with 파이썬’ 책을 공부하며 쓴 글입니다.

Q1. 모험가 길드

문제 요약

’N명’의 모험가와, 각 모험가가 가진 ‘공포도’가 입력으로 주어진다.
공포도가 X인 모험가는 반드시 X명 이상으로 구성된 모험가 그룹에 속해야 한다. 이때 최대 몇 개의 모험가 그룹을 만들 수 있는가?

풀이 순서

  1. 오름차순 정렬 후 작은 공포도부터 확인
  2. 현재 그룹에 포함된 모험가 수가, 현재 확인하고 있는 공포도보다 크거나 같다면, 이를 그룹으로 설정
  3. 이 방법을 이용하면, 공포도가 오름차순 정렬됐다는 점에서, 항상 최소한의 모험가 수만 포함해서 그룹을 결성하게 됨

답안 예시

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
좋은 개발자, 좋은 사람

0개의 댓글