728x90
반응형
문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/42839
풀이:
from itertools import permutations
def solution(n):
numbers = [i for i in n]
com_list = []
for i in range(1, len(numbers) + 1):
com_list += list(permutations(numbers, i))
new_list = set(int(("").join(i)) for i in com_list)
new_list_len = len(new_list)
for i in new_list:
if i < 2:
new_list_len -= 1
for j in range(2, int(i**0.5) +1 ):
if i%j ==0:
new_list_len -=1
break
return new_list_len
permutations 조합. 에라토스테네스 체
1) 받은 수 잘라서 리스트 만듦
2) 나오는 경우의 수 com_list 에 넣음
3) com_list 돌면서 "" 애고 인트형으로 바꿔주면서 set함수로 중복제거
3.1) int 형 하지 않으면 밑에 for 문에서 str 형이라고 걸림
3-2) list 로 하면 예를들어 111 이 들어가면
[1, 1, 1, 11, 11, 11, 11, 11, 11, 111, 111, 111, 111, 111, 111] 으로 나온다.
4) for 문 돌려서
5) 소수 아닌 갯수 만큼 원래 new_list_len 에서 빼주면 소수 의 갯수가 나옴
리스트 컴프리핸션
com_list = []
for i in range(1, len(numbers) + 1):
com_list += list(permutations(numbers, i))
--------위와 아래와 같음--------
# com_list2 = sum([ list(permutations(numbers, i)) for i in range(1, len(numbers) + 1)],[])
# sum(2차원리스트, []) 을 해주면 2차원 리스트로 만들어준다.
밑에 조건 있는 이중 포문은 못 하겠다.
반응형
댓글