728x90
반응형
출처: https://school.programmers.co.kr/learn/courses/30/lessons/12938
문제 풀이:
첫 시도
combinations 를 써서 하려했지만 시간초과날꺼 같았고 4,4 같은경우를 생각못함
두 번째 시도
if n > s :
return [-1]
if n == s:
return [1 for i in range(n)]
필요한 갯수가 합보다 커버리면 자연수 6개로 7을 만들수 없는것처럼 -1 리턴
6개로 7을 만드려면 1을 리스트에 6개 담아서 리턴하면 된다.
가장 큰 곱이 나오려면 각 숫자별 차이가 작아야한다
그래서 합에서 갯수를 나눠주면 똑같은 숫자를 나눠주게되는데.
만약 13을 3개로 만들라 하면 4,4,4 하고 1이 남는다
근데 문제에서 오름차순으로 정렬하라했으니 맨 마지막꺼에 더해주면된다
res = []
a, b = s // n , s % n
a는 몫 b 는 나머지
for i in range(n):
res.append(a)
2,9 일때
>>[4,4]
몫 일단 다 넣고
idx = len(res) -1
인덱스는 0 부터 시작하니 총 길이에서 1 빼주고 >> [0,1]
for i in range(b):
res[idx] +=1
idx -=1
return res
나머지 갯수만큼 포문을 돌려서 맨 뒤에서부터 1씩 더해주면된다
2,9 이면 몫이 4 나머지1
[4,4] 나머지1
나머지 1을 뒤에꺼에서 더해줌
[4,5]
최종
def solution(n, s):
if n > s :
return [-1]
if n == s:
return [1 for i in range(n)]
res = []
a, b = s // n , s % n
for i in range(n):
res.append(a)
idx = len(res) -1
for i in range(b):
res[idx] +=1
idx -=1
return res
반응형
댓글