문제: 84. 최고의집합
- 각 원소의 합이 S가 되는 수의 집합
-
위 조건을 만족하면서 각 원소의 곱이 최대가 되는 집합
- 자연수 2개로 이루어진 집합 중, 합이 9가 되는 집합은 다음과 같이 4개가 있다.
- {1,8}, {2,7}, {3,6}, {4,5}
-
이중 각 원소의 곱이 최대인 {4,5}가 최고의 집합이다.
- 제한 사항
- 최고의 집합은 오름차순으로 정려로딘 1차원 배열로 return해야한다.
-
최고 집합이 존재하지 않을 경우, 크기가 1인 1차원 배열에 -1을 채워서 return
- 자연수의 개수 n은 1이상 10,000 이하의 자연수
- 모든 원소들의 합 s는 1이상, 100,000,000이하의 자연수이다.
생각지도 못한 방법
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)
print(solution(2, 9))
- codedrive님의 코드를 보고 정말 놀랐다.
- 곱이 최대가 되려면, 원소들이 골고루 높아야 한다는 특성을 이용하셨다.
- 수학을 잘하면 코딩이 편해진다는게 이런 말인듯 하다.
-
divmod 함수는
Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
참고자료 [프로그래머스]https://programmers.co.kr/learn/challenges [codedrive님의코드]https://codedrive.tistory.com/tag/%EC%B5%9C%EA%B3%A0%EC%9D%98%20%EC%A7%91%ED%95%A9