코딩테스트/프로그래머스

[프로그래머스 Level3] 최고의 집합 - 파이썬(Python)

yejin72 2022. 12. 6. 12:37
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

  1. 각 원소의 합이 S가 되는 수의 집합
  2. 위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합

예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다.
{ 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 }
그중 각 원소의 곱이 최대인 { 4, 5 }가 최고의 집합입니다.

집합의 원소의 개수 n과 모든 원소들의 합 s가 매개변수로 주어질 때, 최고의 집합을 return 하는 solution 함수를 완성해주세요.

 


규칙을 찾기 위한 예제들

n s answer solution
1 9 [9] 9//1 = 9
2 9 [4, 5] 9//2 = 4 -> 5//1 = 5
3 9 [3, 3, 3] 9//3 = 3 -> 6//2 = 3 -> 3//1 = 3
4 9 [2, 2, 2, 3] 9//4 = 2 -> 7//3 = 2 -> 5//2 = 2 -> 3//1 = 3
2 1 [-1] 1//2 = 0...

 

 풀이 과정

0. 처음 s//n == 0이라면 [-1]을 반환한다.

1. 반환되지 않았다면 answer에는 s//n의 값을 넣는다.

2, s = s - s//n 이 되고, n = n -1 이 된 이후 1~2 과정을 반복한다.

3. n = 1이 된다면 만들어진 answer 리스트를 반환한다.

 

 

<< 정답 코드 >>

def solution(n, s):
    answer = []
    if s // n == 0:
        return [-1]
    
    while n >= 1:
        answer.append(s // n)
        s -= s // n
        n -= 1
    return answer
728x90