ISTP의 간단명료 블로그

[프로그래머스] 소수 찾기 / 완전탐색 / 배열의 경우의 수(permutation) 본문

풀다

[프로그래머스] 소수 찾기 / 완전탐색 / 배열의 경우의 수(permutation)

djwis 2023. 7. 10. 22:01

문제

풀이

from itertools import *

def solution(numbers):
    answer = 0
    num=[]
    strNum=[]
    for a in range(len(numbers),0,-1):
        strNum = strNum+list(permutations(numbers, a))
    for a in strNum:
        num.append(int(''.join(a)))
    return sum([is_prime_number(x) for x in set(num)])

def is_prime_number(x):
    # 2부터 (x - 1)까지의 모든 수를 확인하며
    if x < 2:
        return False
    for i in range(2, x):
        # x가 해당 수로 나누어떨어진다면
        if x % i == 0:
            return False # 소수 아님
    return True

다른사람 풀이

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)

느낀점

  • a |= b ( a = a or b)
  • 리스트 원소의 경우의 수 구하는 방법 👉 permutation
    • from itertools import permutation 활용
  • 소수 찾는 방법 (에라토스테네스의 체)
    • 2부터 (구하고자 하는 수의 제곱근)까지의 배수만 지우면 소수개수 확인 가능