📖 문제
🧑🏻💻 풀이 과정
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
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[백준] 1655 가운데를 말해요 (0) | 2022.05.26 |
---|---|
[백준] 14890 경사로 (0) | 2022.05.23 |
[프로그래머스] 파괴되지 않은 건물 (0) | 2022.05.09 |
[프로그래머스] 베스트앨범 (0) | 2022.05.04 |
[프로그래머스] 가사 검색 (0) | 2022.05.03 |
댓글