728x90
반응형
문제:
자연수 n 개로 이루어진 집합 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다.
1.각 원소의 합이 S가 되는 수의 집합
2.위 조건을 만족하면서 각 원소의 곱이 최대가 되는 집합
예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다.
{1,8},{2,7},{3,6},{4,5}
그중 각 원소의 곱이 최대인 {4,5}가 최고의 집합입니다.
집합의 원소의 개수 n과 모든 원소들의 합 s가 매개변수로 주어질 때, 최고의 집합을 return 하는 solution 함수를 완성해주세요.
풀이 방법:
합이 s가 되는 것을 만드는 것은 어렵지 않다. 원소의 곱이 최대가 만드는 것이 중요한데, 하나의 큰 수를 만들면(예시 중 8)이 작은 수가 생길 수 밖에 없다(예시 중1). 즉 모든 원소들이 골고루 높을 경우에 원소의 곱이 최대가 되는 것이다. 따라서 s를 n으로 균등하게 나누어서 몫으로 answer을 길이 n만큼 만들고 나머지 부분들을 answer을 순환하며 1씩 더해주면 그 집합이 원소의 합이 s가 되며 곱이 최대가 되는 집합이 된다.
1 2 3 4 5 6 7 8 | def solution(n, s): if n > s: return [-1] [portion,remain]=divmod(s,n) answer=[portion]*n for i in range(remain): answer[i]+=1 return sorted(answer) | cs |
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[Programmers]Lv 3.짝지어 제거하기 (0) | 2019.03.21 |
---|---|
[Programmers]Lv 2.행렬의 곱셈 (0) | 2019.03.20 |
[Programmers]Lv 2. 피보나치 수 (0) | 2019.03.18 |
[Programmers]Lv 3.줄 서는 방법 (0) | 2019.03.17 |
[Programmers]Lv 2. 최솟값 만들기 (0) | 2019.03.16 |