3752. 가능한 시험 점수
틀린 문제 풀이1
- 런타임 에러 발생
combinations
사용
from itertools import combinations
t = int(input())
for i in range(1, t + 1):
n = int(input())
score = list(map(int, input().split()))
num = set()
for k in range(1, n):
scorelist = list(combinations(score, k))
for s in scorelist:
ans = 0
for t in s:
ans += t
if ans not in num:
num.add(ans)
print(f"#{i} {len(num) + 2}")
틀린 문제 풀이2
import sys
sys.stdin = open("input.txt", "r")
t = int(input())
for a in range(1, t + 1):
n = int(input())
score = list(map(int, input().split()))
num = set()
def dfs(idx, r, start):
if idx == r:
num.add(sum(result))
return
for i in range(start, len(arr)):
result[idx] = score[arr[i]]
dfs(idx + 1, r, i + 1)
arr = [i for i in range(n)]
for i in range(1, n + 1):
result = [0] * (i)
dfs(0, i, 0)
print(f"#{a} {len(num) + 1}")
정답 문제 풀이
import sys
sys.stdin = open("input.txt", "r")
t = int(input())
for a in range(1, t + 1):
n = int(input())
scorelist = list(map(int, input().split()))
result = [0] * (sum(scorelist) + 1)
result[0] = 1
for score in scorelist:
for i in range(len(result) - score, -1, -1):
if result[i]:
result[i + score] = 1
print(f"#{a} {sum(result)}")
참고 자료