정올/KOI기출 문제
양팔저울
juwanseo
2025. 4. 24. 17:17
k = int(input())
weight = list(map(int, input().split()))
S = sum(weight)
dp = [False] * (S+1)
def solve(i, w):
if i == k:
if 0 < w <= S:
dp[w] = True
else:
solve(i + 1, w + weight[i])
solve(i + 1, w - weight[i])
solve(i + 1, w)
solve(0, 0)
ans = 0
for chk in dp[1:]:
if not chk:
ans += 1
print(ans)
이 코드는 주어진 가중치 리스트 weight에 대해 각 원소를 더하거나 빼는 방식으로 만들 수 있는 가중치의 모든 가능한 합을 구하고, 그 중에서 만들 수 없는 가중치의 개수를 출력하는 프로그램이다. dp 배열은 각 가중치 합이 가능한지 여부를 저장하고, solve 함수는 재귀적으로 각 원소를 더하거나 빼면서 가능한 가중치 합을 구한다. 모든 가중치 합을 구한 후, dp 배열에서 1부터 S까지의 값 중 가능한 합이 아닌 값들의 개수를 세어 출력한다.