https://school.programmers.co.kr/learn/courses/30/lessons/12938
시도 1
각원소의 곱이 최대가 되기 위해서는 최대한 큰 시작값의 원소를 찾아야한다. s를 n으로 나누었을때 나머지는 생각하지 않고 몫을 answer 배열의 n개만큼 채워놓고 for문을 돌면서 원소의 합이 s와 같지 않으면 1씩 더하면 된다.
어차피 n > s 이므로 포문을 돌면서 1을 더하면 무조건 s의 값까지는 도달할 수 있다.
1
2
3
4
5
6
7
8
9
10
|
def solution(n, s):
quotient, remainder = divmod(s, n)
answer = [quotient] * n
if n > s:
return [-1]
for i in range(len(answer)):
if sum(answer) != s:
answer[i] += 1
else:
return sorted(answer)
|
정확도 테스트는 전부 통과했지만 효율성 테스트에서 실패하여 75점
시도 2
나머지 값만큼만 합이 모잘랐기 때문에 포문은 나머지값만 돌면 되었다. 마지막에 리턴하지 sorted 하지 않고 배열의 끝부터 더하여 주었다.
1
2
3
4
5
6
7
8
9
10
|
def solution(n, s):
if n > s:
return [-1]
quotient, remainder = divmod(s, n)
answer = [quotient] * n
for i in range(remainder):
answer[-i -1] += 1
return answer
|
다른사람풀이#
수학적 풀이 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def bestSet(n, s):
answer = []
a = int(s/n)
if a == 0:
return [-1]
b = s%n
for i in range(n-b):
answer.append(a)
for i in range(b):
answer.append(a+1)
return answer
|