Agorithm/백준 알고리즘
백준 알고리즘 19699번 소-난다!(python)
kimjinho1
2021. 3. 23. 18:28
728x90
반응형
백트래킹 & 소수 판정(에라토스테네스의 체) 문제이다. 꽤 좋은 퀄리티의 문제인 것 같다.
def dfs(depth):
if depth == M:
s.add(sum(li))
for i in range(N):
if check[i]:
continue
li.append(nums[i])
check[i] = 1
dfs(depth+1)
li.pop()
for j in range(i+1, N):
check[j] = 0
def prime(n):
li = [1]*(n+1)
for i in range(2, int(n**0.5)+1):
if li[i]:
for j in range(i+i, n+1, i):
li[j] = 0
p = [i for i in range(2, n+1) if li[i]]
return p
N, M = map(int, input().split())
nums = list(map(int, input().split()))
s = set()
li = []
check = [0]*N
dfs(0)
p = prime(1000*M)
ok = 0
if s:
for n in sorted(s):
if n in p:
ok = 1
print(n, end=' ')
if ok == 0:
print(-1)
728x90
반응형