본문 바로가기

개발/algorithm

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

문제 링크

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

 

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

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

programmers.co.kr

풀이

  • 곱이 최대가 되려면 각 자연수간 차이가 적어야 한다. 
  • n이 s보다 큰 경우, n개의 자연수로 s를 만드는 것이 불가능하므로 [-1] 반환
  • 아닌 경우,
    1. s를 n으로 나눈 몫을 answer 배열에 n개 저장
    2. 나머지가 있을 수 있으므로, 나머지만큼 뒤에서부터 1을 더해줌 (오름차순이므로)
def solution(n, s):
  answer = []

  if n > s : 
    return [-1]
  
  num = s // n
  
  for _ in range(n):
    answer.append(num)
  
  index = len(s) -1
  
  for i in range(s%n):
    answer[index] += 1
    index -= 1 
    
  return answer