Algorithm/Problems

99클럽 코테 스터디 23일차 TIL + 완전탐색

공부좀하시졍 2024. 11. 20. 00:15

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

from itertools import permutations

def chkPrime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5)+1):
        if num % i == 0:
            return False
    return True

def solution(numbers):
    nums = list(numbers)
    p_nums = []
    cnt = 0
    
    for i in range(1, len(numbers)+1):
        for p in permutations(nums, i):
            p_nums.append(int(''.join(p)))
    
    p_nums = list(set(p_nums))
    
    for i in p_nums:
        if chkPrime(i):
            cnt += 1
    return cnt
  • 소수 판별할 수의 제곱근까지 구하면 된다.
  • 입력받은 numbers를 list화를 해 nums의 길이의 자리수만큼 수를 만들 수 있으므로 1자리부터 len(numbers)자리까지 수를 만든다.
  • 중복을 제거하기 위해 set() 함수를 사용한다.
  • 소수판별 알고리즘으로 에라토스테네스의 체 를 알면 좋다!