ror_coding

[Programmers] 소수 찾기 - 42839 본문

Algorithm/Python

[Programmers] 소수 찾기 - 42839

ro_rdil_31 2024. 12. 12. 17:36
728x90

permutations를 이용해서 숫자가 가질 수 있는 모든 조합을 set에 저장하기.

 

Question

 

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

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

 

Point

 

  • 이중 for 문으로 availables를 완성했는데, map을 이용하여 for문 한 개로 availables를 만듦.
  • 0과 1은 제외함. (range(0, 2))
  • + 에라토스테네스의 체 알고리즘을 쓰는게 더 오래걸려서 단순 not sum() : cnt+=1 로 진행함.

 

Code

 

from itertools import permutations as perm
def solution(numbers):
    answer, nums = 0, set()
    
    for i in range(1, len(numbers)+1):
        nums |= set(map(int, map("".join, perm(list(numbers),i))))
    nums -= {0,1}
    for num in nums:
        if not sum(1 for i in range(2, int(num**0.5)+1) if num%i == 0): answer += 1
    
    return answer

 

now me

On my github

 

728x90