이코테-chapter 11: 그리디 문제-모험가 길드

cosmos·2022년 4월 13일
0
post-thumbnail

내 풀이

# 난이도: 하, 메모리 제한: 128MB
# 첫째 줄에 모험가의 수 N이 주어진다. (1 <= n <= 100000)
# 둘째 줄에 각 모험가의 공포도 값을 n 이하의 자연수로 주어지며, 각 자연수는 공백으로 구분합니다.
# 여행을 떠날 수 있는 그룹 수의 최댓값을 출력하라.
""" input data
5
2 3 1 2 2
"""
""" output data
2
"""
import sys

input = sys.stdin.readline

def solve(gongpo: list) -> int:
    result = 0

    while gongpo:
        max_num = max(gongpo)
        del(gongpo[gongpo.index(max_num)])
        gongpo.sort()
        gongpo = gongpo[max_num:]
        result += 1

    return result

if __name__ == '__main__':
    n = int(input())
    gongpo = list(map(int, input().split()))

    print(solve(gongpo))

답안 풀이

# 난이도: 하, 메모리 제한: 128MB
# 첫째 줄에 모험가의 수 N이 주어진다. (1 <= n <= 100000)
# 둘째 줄에 각 모험가의 공포도 값을 n 이하의 자연수로 주어지며, 각 자연수는 공백으로 구분합니다.
# 여행을 떠날 수 있는 그룹 수의 최댓값을 출력하라.

# 공포도를 기준으로 오름차순으로 정렬을 수행하라
# 이후에 공포도가 가장 낮은 모험가부터 하나씩 확인하며, 그룹에 포함될 모험가의 수를 계산할 수 있다.
# 반복문으로 공포도를 하나씩 확인하며 "현재 그룹에 포함된 모험가의 수가 현재 확인하고있는 공포도"보다 크거나 같다면 이를 그룹으로 결성한다.
# 오름차순으로 정렬되어 있다는 점에서 항상 최소한의 모험가의 수만 포함하여 그룹을 결성하게 된다.
# 따라서, 최대한 많은 그룹이 구성되는 방법이다.

""" input data
5
2 3 1 2 2
"""
""" output data
2
"""
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)  # 총 그룹의 수 출력

출처 & 깃허브

이것이 취업을 위한 코딩 테스트다 with python
github

0개의 댓글

관련 채용 정보