[프로그래머스] 최고의 집합(Python)

수경·2023년 7월 10일
0

problem solving

목록 보기
172/174

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

풀이

n개의 수의 합이 s이고, 곱이 가장 크려면 모든 수가 비슷하게 커야한다!
그러려면 s / n 값을 기준으로 놓는 것이 좋다.
예를 들어 n = 3, s = 9 의 경우 답은 [3, 3, 3] 인 거다!
하지만 모든 수가 딱 떨어지지 않고 n = 3, s = 11 인 경우와 같이 나머지가 생기는 수가 있다.
이 경우 나머지 수를 적절히 배분하면 된다. [3, 4, 4]
d = s / n, m = d % n 이라고 할 때, 위 경우 d = 3, m = 2 이다.
m만큼 남는 값을 배열 요소에 하나씩 더해주면 된다.
고민하다가 m을 인덱스로 접근하여 해결하였다.
m을 감소시키면서 m인덱스 자리에 1씩 더하면 된다~~


코드

def solution(n, s):
    if s / n < 1: return [-1]
    
    d, m = divmod(s, n)
    answer = [d for i in range(n)]
    
    while m > 0:
        answer[m] += 1
        m -= 1
    
    return sorted(answer)
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글