[프로그래머스 LV3] 최고의 집합
1. 문제 설명
2. 문제 분석
s를 n개의 자연수 합으로 표현한다. 가능한 모든 조합 중 곱이 가장 큰 경우의 집합을 구한다.
s를 n개의 자연수 합으로 표현한다. 가능한 모든 조합 중 곱이 가장 큰 경우의 집합을 구한다.
가장 곱이 큰 경우
가 어떤 경우일까? 자연수 8를 2개 자연수의 합으로 표현할 때 {1, 7}, {2, 6}, {3, 5}, {4, 4}가 존재한다. 각 곱은 7, 12, 15, 16이다. 여기에서 한 가지 힌트를 얻을 수 있다. 곱해지는 수 사이의 차가 가장 작은 조합이어야 한다
는 것이다.
- s를 n으로 나눈 몫을 통해 각 버킷(즉 배열의 특정 인덱스)에 담을 기본값을 세팅하자.
- 나머지 r을 하나씩 버킷에 더해가면서 총합 s를 충족시키자.
3. 나의 풀이
def solution(n ,s):
q, r = divmod(s, n)
if q==0: return [-1]
result = [q]*n
# s를 n개 자연수 합으로 표현할 때 가장 큰 곱이 나올 경우: 각 버킷에 담긴 자연수 간 차가 가장 작다
# s=11 n=3 -> [n1, n2, n3] 중 [3, 3, 3]을 먼저 구해 놓고 나머지 2를 각 버킷에 1씩 나눠서 더해준다.
idx = -1
for _ in range(r):
result[idx] += 1
idx -= 1
# 오름차순 정렬용
return result
Author And Source
이 문제에 관하여([프로그래머스 LV3] 최고의 집합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@j_aion/프로그래머스-LV3-최고의-집합
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def solution(n ,s):
q, r = divmod(s, n)
if q==0: return [-1]
result = [q]*n
# s를 n개 자연수 합으로 표현할 때 가장 큰 곱이 나올 경우: 각 버킷에 담긴 자연수 간 차가 가장 작다
# s=11 n=3 -> [n1, n2, n3] 중 [3, 3, 3]을 먼저 구해 놓고 나머지 2를 각 버킷에 1씩 나눠서 더해준다.
idx = -1
for _ in range(r):
result[idx] += 1
idx -= 1
# 오름차순 정렬용
return result
Author And Source
이 문제에 관하여([프로그래머스 LV3] 최고의 집합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j_aion/프로그래머스-LV3-최고의-집합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)