관리 메뉴

JIE0025

[완전탐색][lv.2] 소수 찾기- 파이썬(Python) 본문

알고리즘/프로그래머스

[완전탐색][lv.2] 소수 찾기- 파이썬(Python)

Kangjieun11 2023. 1. 24. 21:29
728x90

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항
  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

 


💡 사고과정

1) Permutations로 모든 순열을 찾은 다음,

2) 전체를 보유한 set에 넣어준다  (같은 숫자가 생길수 있어서) 

3) isDecimal()함수를 만든다. 0과 1은 소수가 아니므로 미리 전처리로 False를 리턴한다.

 

 

⏺ 에라토스테네스의체에서 num까지 진행하면

from itertools import permutations
import math

def isDecimal(num):
    if(num <= 1):
        return False 
    #에라토스테네스의 체
    for i in range(2, num):
        if num%i == 0:
            return False    
    return True
    
def solution(numbers):
    
    li = list(numbers)
    allNums = set()
    for i in range(1, len(numbers)+1):
        permutationList = permutations(li, i)
        for perm in permutationList:
            num = int(''.join(perm))
            allNums.add(num)

    
    count = 0
    for num in allNums:
        #print(num)
        if isDecimal(num):
            count+=1
            
    return count

 

 

💻 내가 쓴 정답코드

⏺ 에라토스테네스의 체에서 math.sqrt() +1 을 사용

from itertools import permutations
import math

def isDecimal(num):
    if(num <= 1):
        return False 
    #에라토스테네스의 체
    for i in range(2, int(math.sqrt(num)+1)):
        if num%i == 0:
            return False    
    return True
    
def solution(numbers):
    
    li = list(numbers)
    allNums = set()
    for i in range(1, len(numbers)+1):
        permutationList = permutations(li, i)
        for perm in permutationList:
            num = int(''.join(perm))
            allNums.add(num)

    
    count = 0
    for num in allNums:
        #print(num)
        if isDecimal(num):
            count+=1
            
    return count

 

 


이제 슬슬 콘솔에 찍어가면서 문제 푸는게 익숙해지고 있다!

남은 기간도 화이팅!!