본문 바로가기

PS/프로그래머스

[프로그래머스 LV 3] 최고의 집합 (파이썬/python)

728x90

https://programmers.co.kr/learn/courses/30/lessons/12938

 

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

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

programmers.co.kr

 

계속 종이에 써보고 계속 숫자들 바꿔가며 사례를 찾아봤다.

 

일단 S // N 의 값을 최대한 많이 쓰는게 좋다.

몫은 S를 N개로 구성할 수 있는 가장 중간의 값이 되는데

주변으로 퍼지지 않고 가운데로 집중될수록 곱했을떄 값이 크다는걸 알았다.

 

S//N을 N개만큼 리스트에 넣어주고

S%N 만큼 각각의 요소에 +1을 해주면 정답이 나온다.

풀고나니까 너무 기분좋다 ㅋ

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def solution(n, s):
    answer = []
    # 만약 나누었을때 몫이 0이 나오면
    # 집합 자체를 만들 수 없음 이땐 -1 반환
    if n > s:
        return [-1]
 
    # 몫 n개를 answer에 넣어준다
    if s % n == 0:
        m = s // n
        answer = [m] * n
    # 나누어 떨어지지 않으면
    else:
        # m을 n개만큼 리스트를 만들고
        # 나머지 만큼 리스트 안의 갯수들에 각각 +1 해준다
        m = s // n
        n_ = s % n
        answer = [m] * n
 
        for i in range(n_):
            answer[i] += 1
 
    answer = sorted(answer)
 
    return answer
cs
728x90