[Programmers / Python / 완전탐색] - 소수 찾기

Young·2021년 5월 15일
0

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

def isPrime(num):
    num = int(num)
    if (num == 1) or (num == 0):
        return False
    
    for i in range(2,num):
        if num % i == 0:
            return False

    return True
    
def solution(numbers):
    cnt = []
    
    for i in range(len(numbers)):
        if isPrime(numbers[i]):
            cnt.append(numbers[i])

        for j in range(len(numbers)):
            if i != j:
                if isPrime(str(numbers[i])+str(numbers[j])):
                    cnt.append(str(int(str(numbers[i])+str(numbers[j]))))
    
    return len(set(cnt))
  

위의 코드의 경우 카드가 2개 이하인 경우에만 가능했다.

카드가 n장 있을 때 모든 순열을 찾는 방법을 생각해보다 라이브러리가 있을거라는 생각이 들었고 결국 검색해서 itertools를 사용하게 되었다.

https://potensj.tistory.com/110
https://juhee-maeng.tistory.com/91?category=922562

from itertools import permutations 

def isPrime(num):
    num = int(num)
    if (num == 1) or (num == 0):
        return False
    
    for i in range(2,num):
        if num % i == 0:
            return False

    return True
    
def solution(numbers):
    cnt = []
    permuList = []

    for i in range(len(numbers)):
        permuList += list(map(''.join, permutations(numbers, i+1)))
    
    for p in permuList:
        if isPrime(p):
            cnt.append(str(int(p)))

    return len(set(cnt))
  

다른 사람의 풀이

filter 사용하는 다른 사람의 코드를 참고해 나의 코드의 일부분을 수정해봤다.

# 수정 전 코드
    for p in permuList:
        if isPrime(p):
            cnt.append(str(int(p)))

    return len(set(cnt))
# 수정 후 코드
    permuList = map(int, permuList)
    return len(list(filter(isPrime, set(permuList))))

정리

itertools

filter

profile
👩🏻‍💻

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN