Coding Test

[프로그래머스] 최고의 집합

상상쓰 2021. 8. 13. 17:49

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

 

코딩테스트 연습 - 최고의 집합

자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만

programmers.co.kr

 

두 수의 합이 같을 때 두 수의 차이가 가장 작다면 곱이 가장 크다. 

x * (s-x) 로 그래프만 그려보더라도 위의 명제가 사실이라는 것을 이해할 수 있을 것이다.

위의 사실로 n 이 3이상일 때 각 수의 차이가 가장 작을 때 곱이 가장 크다는 것을 이해할 수 있다.

 

def solution(n, s):
    answer = []
    
    if n > s:
        answer.append(-1)
    else:
        q, r = divmod(s, n)
        answer = [q] * n

        for i in range(n-r, n):
            answer[i] += 1

    return answer

print(solution(2, 9)) # [4, 5]