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
- 처음 for문을 통해 permutations 함수(순열함수)를 가지고 모든 조합을 만든다. set으로 중복을 쳐낸다.
- 두번째 for문. 튜플에 있는 각 숫자들을 join함수를 통해 합쳐 per에 추가시킨다.
- 예) "17" 의 경우 j는 ('1',) , ('7',) , ('1', '7'), ('7', '1') 인데 for문을 다 돌면 per = [1, 7, 17, 71]이 된다.
- 예를 들어 "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 |