728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw#none
# 조건
- 높이가 B인 선반과 N명의 점원
- 각 점원들의 키는 Hi 고 (1<=H<=10000)
- 각 점원들이 선반위의 물건을 꺼내기 위해 탑을 쌓는데 탑은 최소 1명의 점원으로 이루어져있다.
- 선반 B보다 높은 탑 중 가장 낮은 탑과의 차이를 구하여라
# 접근 방법
- 부분 집합을 구해주면 될 것 같기 때문에 순열과 조합 중에 선택하면 된다.
- N이 20정도가 되면 A+B와 B+A는 같기 때문에 순서가 상관없는 조합으로 구해준다.
- 조합의 원소수가 1개에서부터 N개까지를 반복문 변수 i를 통하여 변경시켜준다.
from itertools import combinations
import sys
sys.stdin = open('input.txt')
# 높이 B인 선반, N명의 점원들의 키는 Hi
# 탑을 쌓아서 키보다 높이 있는 물건 꺼낼수 있다.
# 높이가 b이상 중 가장 낮은 탑의 높이와 b의 차이
T = int(input())
for tc in range(1, T+1):
N, B = map(int, input().split())
a = list(map(int, input().split()))
# 나올수 없는 제일 큰수를 min값으로 잡아준다.
result = 200001
for i in range(1, N+1):
# 1~N개로 이루어진 조합을 person에 담아주며
person = list(combinations(a, i))
for j in person:
# 문제 조건의 B보다 조합의 합이 크다면
if sum(j) >= B:
# 그때의 차이가 min값 보다 작다면 재설정해준다.
if sum(j)-B < result:
result = sum(j)-B
print(f'#{tc} {result}')
728x90
'ALGORITHM > 수학, 기하학' 카테고리의 다른 글
[백준 20206] 파이썬 - 푸앙이가 길을 건너간 이유 (0) | 2022.10.02 |
---|---|
[백준 1676번] 파이썬 - 팩토리얼 0의 개수 (1) | 2022.09.28 |
[백준 2108] 파이썬 - 통계학 (1) | 2022.09.16 |
[백준 11729번] 파이썬 - 하노이 탑 이동순서 (0) | 2022.09.06 |
[백준 2292] 파이썬 - 벌집 (0) | 2022.08.07 |