LV3. [연습문제] 최고의 집합

HyeonKi Jo·2022년 10월 12일
0
post-thumbnail

LV3. [연습문제] 최고의 집합

https://school.programmers.co.kr/learn/courses/30/lessons/12938

접근

  • 각 원소의 합이 S가 되는 수의 집합
  • 위 조건을 만족하면서 각 원소의 곱이 최대가 되는 집합
    -> 만약 s=10, n=2 일 때, (1, 9), ..., (5, 5), ..., (9, 1)의 경우가 가능하다.
    -> (1, 9) = (9, 1)이니 결국 (1, 9) -> (5, 5)의 경우만 보면 될 것이다.
    -> 위 경우에서 원소들의 곱이 가장 큰 경우는 (5, 5)의 경우이다.
    -> 이렇게 모든 원소가 평균치로 비슷비슷할 떄, 원소들의 곱이 가장 크지 않을까? 하고 가정해본다.

코드

def solution(n, s):
    answer = []

    if n > s :	# 집합을 구성할 수 없는 경우 리스트형태의 -1 반환
        return [-1]

	# 원소의 합을 원소의 개수로 나눈 숫자로 리스트를 생성
    num = [s//n] * n 

    # 원소의 합을 원소의 개수로 나눴을때, 나머지를 만큼 원소에 골고루 더해줘야함
    left = s % n 

	# left가 0이 될 때까지 num리스트에 골고루 더해준다.
    for i in range(n-1, -1, -1):
        if left > 0:
            num[i] += 1
            left -= 1
        else:
            break

	# 골고루 나눠진 합이 s이고, 곱이 가장 큰 리스트 반환
    return num
profile
Talking Potato

0개의 댓글