모험가 길드

이종호·2020년 9월 30일
0

알고리즘

목록 보기
1/18

동빈이를 위해 N명의 모험가에 대한 정보가 주어졌을 떄, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요.

arr = list(map(int, input().split()))

arr.sort(reverse=True)

i = 0
count = 0

while True:
    if i >= len(arr): break
    max_value = arr[i]
    arr_len = len(arr[i:])

    if max_value <= arr_len:
        i += max_value
        count+=1
    else:
        break

print("result =", count)    

첫 번째 풀이

굉장히 깔끔하지 못하고, 비효율적으로 보이긴 하지만, 일단 첫 아이디어이고 설명을 해보겠다.

우선 기본 접근은 내림차순으로 정렬을 한 뒤, 인덱스(i)를 조정하면서 해당 원소만큼 건너뛰고 카운트를 증가시키고
배열의 길이를 확인하고
하는 식으로 접근했다.

의문점 1: 꼭 정렬을 수행했어야 했을까?

우선 내가 보기엔 그렇다.

최대한의 그룹을 만들려면, 가장 공포심을 느끼는 사람들끼리 먼저 그룹핑을 해주어야 하고,
그러고 남은 사람들중 또 가장 공포심을 느끼는 사람들끼리 그룹핑을 해주어야 하기 때문이다.
그렇기 때문에 꼭 정렬이 필요하다고 생각했다.

개선점: 코드를 더 간결하게 할 순 없었을까?

분명히 있을 것이다
하지만 아직 잘 다듬을 수 없고, 그리디 문제를 다 풀고 난 뒤에 접근해 보도록 하겠다.

문제를 잘못 이해했다. 다시 풀자

profile
열심히 사는 사람

0개의 댓글