Algorithm/Programmers

[Python] 소수 찾기

느낌표 공장장 2021. 5. 27. 03:09
def prime_number(num) :
    for i in range(2, num) :
        if num % i == 0 :
            return False
    return True

from itertools import permutations

def solution(numbers):
    per = []
    for i in range(1, len(numbers)+1) :
        a = list(set(permutations(numbers, i)))
        for j in a :
            per.append(int(''.join(j)))
    per = set(per) - set(range(0,2))
    
    answer = 0
    for num in per :
        if prime_number(num) :
            answer += 1
    return answer

풀이

1) 순열 조합만들기

from itertools import permutations

def solution(numbers):
    per = []
    for i in range(1, len(numbers)+1) :  # 1
        a = list(set(permutations(numbers, i)))
        for j in a :  # 2
            per.append(int(''.join(j)))
    per = set(per) - set(range(0,2)) # 3
  1. 처음 for문을 통해 permutations 함수(순열함수)를 가지고 모든 조합을 만든다. set으로 중복을 쳐낸다.
  2. 두번째 for문. 튜플에 있는 각 숫자들을 join함수를 통해 합쳐 per에 추가시킨다.
    • 예) "17" 의 경우 j는 ('1',) , ('7',) , ('1', '7'), ('7', '1') 인데 for문을 다 돌면 per = [1, 7, 17, 71]이 된다.
  3. 예를 들어 "011"의 경우 11이 두번 추가되므로 ('11', '011'을 int로 변환하면 둘다 11) 이런 중복을 없애기 위해 set함수를 쓰고, 0과 1은 소수를 구하는데 필요하지 않으니 빼준다.

 

2) 소수인지 판별하는 함수 만들기

def prime_number(num) :
    for i in range(2, num) :
        if num % i == 0 :
            return False
    return True

소수가 아니면 False를 반환하고(2 ~ num-1 까지의 숫자 중 나누어 떨어지는 숫자가 있는 경우), 소수이면 True를 반환한다.

 

3) 소수 갯수 세기

    answer = 0
    for num in per :
        if prime_number(num) :
            answer += 1
    return answer

위의 prime_number 함수에서 True를 받은 경우 +1을 해준다.

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 메뉴 리뉴얼  (0) 2021.06.02
[Python] 뉴스 클러스터링  (0) 2021.05.28
[Python] 전화번호 목록  (0) 2021.05.27
[Python] 괄호변환  (0) 2021.05.26
[Python] 튜플  (0) 2021.05.26