SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
def dfs(idx, tmp):
global min_h
if idx >= n: # 사람이 최대가 됐을 때
return
tmp += h[idx] # 더한 키들 누적합(탑 높이)
if tmp >= b: # 탑 높이가 목표값 이상일 경우
if min_h > abs(b - tmp): # 차이의 최솟값 갱신
min_h = abs(b - tmp)
# 사람 수 한명씩 늘리기(인덱스+1)
dfs(idx + 1, tmp) # 그 사람의 키를 더한 경우(선택o)
dfs(idx + 1, tmp - h[idx]) # 그 사람의 키를 더하지 않은 경우(선택x)
T = int(input())
for tc in range(1,T+1):
n, b = map(int,input().split())
h = list(map(int,input().split()))
min_h = 200001 # 점원 키의 최대가 200000
dfs(0,0) # 0명, 0cm부터 시작
print(f'#{tc} {min_h}')
'swea' 카테고리의 다른 글
[S/W 문제해결 기본] 10일차 - Contact (0) | 2023.09.25 |
---|---|
1795. 인수의 생일 파티 (0) | 2023.09.25 |
1952. [모의 SW 역량테스트] 수영장 (0) | 2023.09.25 |
2819. 격자판의 숫자 이어 붙이기 (0) | 2023.09.25 |
7465. 창용 마을 무리의 개수 (0) | 2023.09.25 |