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
반응형
'Agorithm > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1182번 부분수열의 합(python) (0) | 2021.03.23 |
---|---|
백준 알고리즘 5636번 소수 부분 문자열(python) (0) | 2021.03.23 |
백준 알고리즘 15965번 K번째 소수(python) (0) | 2021.03.23 |
백준 알고리즘 11502번 세 개의 소수 문제(python) (0) | 2021.03.23 |
백준 알고리즘 6219번 소수의 자격(python) (0) | 2021.03.23 |