본문 바로가기
프로그래머스/3단계

(Python/LV3) 최고의 집합

by windy7271 2022. 10. 28.
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
반응형

댓글