SWEA

SWEA 1486. 장훈이의 높은 선반 [Python]

Hoo_Dev 2022. 3. 27. 13:28
def bfs(n, ssum):
    global ans
    
    if ssum >= B + ans:
        return ans
    
    if n == N:
        if ssum >= B and ssum - B < ans:
            ans = ssum - B
        return

    bfs(n + 1, ssum)
    bfs(n + 1, ssum + arr[n])
    return ans


T = int(input())
for tc in range(1, T + 1):
    N, B = map(int, input().split())
    arr = list(map(int, input().split()))
    ans = 12345678
    print('#{} {}'.format(tc, bfs(0, 0)))

가능한 모든 경우의 수를 다 조사하는 방식의 dfs를 활용한다. 직원의 키 리스트를 더한 값, 더하지 않은 값을 각각 재귀함수를 통해 모든 경우의 수를 조사한다.

 

3~4번째 줄의 if문은 가지치기 방식으로 시간을 좀 더 효율적으로 쓸 수 있다.

ssum이 이미 ans(책장 높이와 직원 키의 차이) + B(책장 높이) 보다 크거나 같다면 더 이상 조사 할 필요가 없으므로 리턴해줌

'SWEA' 카테고리의 다른 글

SWEA 5250. 최소비용 [Python]  (0) 2022.04.05
SWEA 4615. 재미있는 오셀로 게임 [Python]  (0) 2022.03.27
SWEA 2382. 미생물 격리 [Python]  (0) 2022.03.25
SWEA 1861. 정사각형방 [Python]  (0) 2022.03.24
SWEA 1238. Contact [Python]  (0) 2022.03.24