문제출처: https://programmers.co.kr/learn/courses/30/lessons/42839/solution_groups?language=python3
접근법
문제에서 모든 접근법을 다 알려줬다.
이는 얼마나 효율적으로 빠르게 짜느냐가 관건인 것 같다.
가능한 모든 조합의 숫자들을 구하고 소수인지 판별하면 된다.
나는 인덱싱을 통해 dfs를 돌며 모든 숫자 조합들을 매 재귀함수마다 소수인지 판별하였고 중복된 숫자들을 제거하기 위하여 list에 모든 숫자 조합들을 저장하고 중복된 숫자가 없을 때만 정답에 추가하는 코드를 넣었다.
-> 다른 사람의 풀이를 보며 얻은 팁들
코드
import math
def isPrime(number):
if( int(number) == 1 ): return False
count = 0
number = int(number)
for i in range( 1, int(math.sqrt(number))+1 ):
if( number % i == 0 ):
count += 1
return True if count == 1 else False
def solution(numbers):
answer = 0
l = []
v = [0] * len(numbers)
def dfs(index,number,v):
new = v[:]
new[index] = 1
number += numbers[index]
if( isPrime(number) ):
if( int(number) not in l ):
l.append( int(number) )
for i in range( len(numbers) ):
if( not new[i] ):
dfs(i,number,new)
for i in range( len(numbers) ):
dfs(i,"",v)
return len(l)
import math
def check_prime(n):
if n < 2:
return False
if n == 2:
return True
for i in range(2, int(math.sqrt(n)) + 1):
if (n % i) == 0:
return False
return True
number_set = set()
def permutation(base, array):
if base:
number_set.add(int(base))
for i, s in enumerate(array):
permutation(base + s, array[:i] + array[i+1:])
def solution(numbers):
answer = 0
permutation("", list(numbers))
answer = len(list(filter(check_prime, number_set)))
return answer