프로그래머스|최고의 집합

README·2022년 12월 24일
0

파이썬 PS풀이

목록 보기
106/136

문제 설명

합이 s이고 n개의 자연수로 이루어진 중복 수열 중 숫자들의 곱이 가장 큰 조합을 구하는 문제입니다. 만약 n개의 숫자로 합이 s인 조합을 만들 수 없으면 -1을 출력합니다.

작동 순서

  1. 숫자의 개수 n과 합 s를 입력받습니다.
  2. n이 s보다 큰 경우 n개의 자연수로 s를 만들 수 없기 때문에 -1을 출력합니다.
  3. 합이 s이고 n개의 자연수로 이루어진 수열에서 곱이 가장 커지려면 3,3,5,5의 형태보다는 4,4,4,4처럼 숫자간의 차이가 작아야 합니다. 그러한 수열을 만들기 위해서 s를 n으로 나눌 경우 값이 가장 커지는 수열의 숫자 하나를 얻을 수 있습니다. 그 이후 s에서 n을 빼고 n에서 1을 빼주면 합이 s-n이고 n-1개로 이루어진 수열에 필요한 숫자를 얻을 수 있으므로 이 과정을 반복해서 답을 구해줍니다.
  4. 답을 구하면 답을 출력합니다.

소스코드

def solution(n, s):
    answer = []
    if n > s:
        answer.append(-1)
        n = 0
    while n > 0:
        answer.append(s//n)
        s -= s//n
        n -= 1
    return answer
profile
INTP 개발자 지망생

0개의 댓글