Algorithm/programmers/완전 탐색/level2/소수 찾기 (with python)

yellow·2021년 6월 17일
0

알고리즘 문제

목록 보기
43/58

📖 문제

📝 풀이 과정

  1. 우선 에라토스테네스의 체로 소수들을 걸러둔다.
  2. 숫자카드를 length의 길이로 조합해서 소수가 되는 것들을 반환해주는 함수를 만든다. (find_prime)
    • permutations 모듈을 사용해서 length길이의 숫자들의 순열을 구한다.
    • 만든 숫자가 소수인지 검사해서 소수이면 리스트 prime에 담는다.
    • prime을 리턴
  3. 숫자카드를 조합할 길이별로 find_prime함수를 호출해서 그 리턴값을 set answer에 담는다.

⌨ 코드

from itertools import permutations as p

# string 안에 있는 숫자들을 length의 길이로 조합하여 return
def find_prime(string, length, isPrime):
    prime = []
    for number in list(p(string, length)):
        number = int(''.join(number))
        if isPrime[number]:
            prime.append(number)
    return prime

def solution(numbers):
    # 숫자카드를 조합했을 때 중복 제거를 위해 set 자료형으로
    answer = set()
    
    # 에라토스테네스의 체로 소수 구해놓기
    isPrime = [True] * 10000000
    isPrime[0] ,isPrime[1] = False, False
    for i in range(2, int(1000000 ** 0.5)):
        if isPrime[i]:
            j = 2
            while i * j < 10000000:
                isPrime[i*j] = False
                j += 1

    # 숫자카드를 1 ~ len(numbers)의 길이로 조합하기
    for i in range(1, len(numbers)+1):
        answer.update(find_prime(numbers, i, isPrime))

    return len(answer)
profile
할 수 있어! :)

0개의 댓글