본문 바로가기
Problem Solving/프로그래머스

[프로그래머스|파이썬] 소수 찾기 (완전탐색/lv.2)

by 청량리 물냉면 2023. 5. 29.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
from itertools import permutations
def solution(numbers):
    answer = 0
    numbers = list(numbers)	#numbers를 한글자씩 리스트에 저장
    aset = set()
    for i in range(1, len(numbers)+1):
        for j in permutations(numbers, i):	#순열생성
            aset.add(int("".join(j)))	#int로 형변환해 set에 넣어 중복방지
    for a in aset:
        if a in [0, 1]: continue	#0이나 1이 나올 경우 소수가 아니므로 skip
        for k in range(2, int(a**(0.5))+1):	#소수 판별
            if a % k == 0:	#a를 나누어떨어지게 하는 수가 존재한다면
                break	#소수 아님
        else:	#나누어떨어지게 하는 수가 존재하지 않는다면
            answer += 1	#소수체크
    return answer

 

 

다른 풀이 방법

from itertools import permutations
def solution(n):
    a = set()
    for i in range(len(n)):
        a |= set(map(int, map("".join, permutations(list(n), i + 1))))
    a -= set(range(0, 2))
    for i in range(2, int(max(a) ** 0.5) + 1):
        a -= set(range(i * 2, max(a) + 1, i))
    return len(a)

 

반응형