문제 풀이
from itertools import permutations
def solution(numbers):
answer = 0
# 순열을 저장할 배열 생성
arr = []
# 슷자가 1개인 것부터 검사할 것이다. 때문에 시작이 1이고 끝도 그에 맞춰서 1을 더해준다.
for i in range(1, len(numbers) + 1):
# 순열을 구하는 함수 permutations. 이를 list로 받아서 per에 저장.
per = list(permutations(numbers, i))
# 해당 배열을 arr에 추가.
arr += per
# 현재 arr 내의 각 배열에는 문자형으로, 그리고 숫자 하나씩 떨어져서 원소들이 저장되어 있다.
# 이를 ''.join을 사용하여 하나로 합쳐주고, '0123'같은 현상을 방지하기 위해 int형으로 변환한다.
# 이후 중복된 원소를 제거하기 위해 set으로 변경.
arr = set([int(''.join(x)) for x in arr])
# 소수 판별
for i in arr:
# 소수라면 True를, 아니라면 False를 반환할 변수 생성
flag = True
# 2보다 작은 수는 소수라고 부르지 않는다. 때문에 False
if i < 2:
flag = False
# 2부터 i까지 돌면서
for j in range(2, i):
# i가 j로 나누어 떨어진다는 것은 j라는 약수를 가지고 있다는 뜻이 된다. 이는 소수가 아니므로 False
if i % j == 0:
flag = False
break
# 위의 조건문을 모두 통과했다면 소수가 맞다. 때문에 answer += 1
if flag:
answer += 1
return answer
문제 링크
programmers.co.kr/learn/courses/30/lessons/42839?language=python3
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] 카펫 (0) | 2021.01.02 |
---|---|
[프로그래머스] [Python] 모의고사 (0) | 2020.12.11 |
[프로그래머스] [Python] H-Index (0) | 2020.12.09 |
[프로그래머스] [Python] 가장 큰 수 (0) | 2020.12.07 |
[프로그래머스] [Python] K번째 수 (0) | 2020.12.03 |