새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

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

by 언호 2022. 5. 12.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

수학적으로 접근하였을때, 곱을 최대한 높은 값을 가지기 위해서는 숫자들 간 차이가 적을수록 높은 곱의 결과를 갖게 됩니다.

첫번째 조건에서 특정 개수의 숫자들의 합은 동일해야하므로, 곱의 결과만 높게 만들어주는 숫자들의 조합을 찾으면 됬습니다.

 

숫자들의 합을 숫자의 개수로 나누어 몫을 구하였습니다. 이로인해 모든 숫자들의 차이가 동일하도록 만들어주었습니다.

나머지가 발생하는 경우에는 숫자들을 순서대로 돌며 1씩 더해주어 숫자들간 차이를 최소로 만들어주었습니다.

2) 알고리즘

  • 수학

3) 풀이 코드

사용 언어 - Python

def solution(n, s):
    answer = []
    num = s // n
    remain = s % n

    if not num:             # 합이 집합의 개수로 나누어지지 않는 경우
        return [-1]         # 배열 생성이 불가능하므로 -1 반환

    answer = [num] * n      # 정답 배열을 전부 몫으로 채움

    for i in range(remain): # 나머지 값만큼 반복하여 배열에 1씩 더한다
        answer[-i-1] += 1

    return answer

🔗 문제 링크

- https://programmers.co.kr/learn/courses/30/lessons/12938?language=python3 

 

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

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

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글