코딩테스트

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

math_tbro 2022. 1. 13. 22:10

출처

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

 

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

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

programmers.co.kr

풀이 

def solution(n, s):
    answer = []
    
    a = s//n
    if a < 1 :
        answer = [-1]
    else :
        for i in range(n):
            answer.append(a)
            b = s % n
            
        for j in range(b):
            answer[j] += 1
        answer.sort()               
                                
    return answer

 

처음 문제를 제공 받았을 때 n=2 라고 누가 강조해놓고 풀라고 해서... 무지성 s//n s//n +1 이런식으로 출력 했던거 같은데 ... n은 무한한 가능성이 있었다.

 

그래도 풀이 아이디어는 비슷하고 딱 하나만 더 생각하면 됐다.

 

일단 첫 번째로 표현해야 하는 수 n으로 s를 나눴을 때 1보다 작다면 (n = 3, s =2 이면 2/ 3 <1 . 이것은 무슨 짓을 해도 s를 만들수 없다.) 이때 -1 을 출력하도록 한다.

 

2.

그리고 그 다음으로 s//n 으로 나눈 몫 과 s%n 나머지를 이용해준다. 

s =24 , n =5 로 가정해보자. 그러면 24 // 5 = 5 , 24%5 = 4 . 다 그럴 경우 이것은 [5,5+1,5+1,5+1,5+1] = [5,6,6,6,6] 이 나와야한다.

 

3.  그래서 n개의리스트를 만들어서[5 5 5 5 5] 로 세팅후 나머지 개수 만큼 1을 더해준다.