코딩테스트/프로그래머스

[프로그래머스] [Level 2] [완전탐색] 소수 찾기

박소민 2022. 7. 28. 16:57
소수 찾기
 

프로그래머스

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

programmers.co.kr

 

 

  • 내 풀이
    •  n자리 수를 조각내서 조합할 때 1자리수, 2자리수, ....n자리수 숫자들을 모두 구해야함
    • list+list 가능
from itertools import permutations

def solution(numbers):
    answer = 0
    num1=[i for i in str(numbers)]
    num=num1
    for i in range(2,len(num1)+1):
        num=num+list(permutations(num1,i))

    num=list(set(int("".join(m)) for m in num))
    
    for n in num:
        n=int(n)
        if n==0 or n==1:
            continue

        for i in range(2,n//2+1):
            if n%i==0:
                break
        else:
            answer+=1
       
    return answer

 

 

  • 다른 사람 풀이
    • 약수는 대칭적이기 때문에 sqrt(n)까지만 알아보면 된다
    • set끼리 합칠 때 합집합 이용
      • set |= set
    • set에서 뺄 때
      • set-= set

from itertools import permutations

def solution(numbers):
    answer = 0
    num = set()
    for i in range(len(numbers)):
        num |= set(map(int, map("".join, permutations(list(numbers), i + 1))))
    num -= set(range(0, 2))
    
    for n in num:
        for i in range(2,int(n**0.5)+1):
            if n%i==0:
                break
        else:
            answer+=1
       
    return answer