출처
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을 더해준다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.01.13 |
---|---|
[프로그래머스] 제일 작은 수 제거하기 - python (0) | 2022.01.13 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.01.13 |
백준 1011 Fly me to the Alpha Centauri - python (0) | 2022.01.06 |
백준 2908 상수 - python (0) | 2022.01.03 |