https://programmers.co.kr/learn/courses/30/lessons/42839
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
from itertools import permutations
def isPrime(n):
check = True
if n != 2 and n % 2 == 0:
return False
if n == 1 or n == 0:
return False
for i in range(2, n):
if n % i == 0:
check = False
return check
def solution(numbers):
answer = 0
n_list = list(numbers)
com_list = []
for i in range(1, len(numbers)+1):
com_list.extend(list(map(''.join, permutations(n_list, i))))
set_com = set(map(int, com_list))
for n in set_com:
if isPrime(int(n)):
answer += 1
return answer
numbers의 모든 수들의 순열을 개수별로 구해서 com_list에 저장하고
각각을 int로 캐스팅하고 중복을 없애는 set을 통해
set_com에 저장한뒤 하나하나 isPrime 메서드를 통해 확인한다.
isPrime 은 2~ (n-1)의 숫자를 n에서 나눈 나머지가 0이되는지 체크해주는데
편의를 위해 0,1, 그리고 짝수 일때는 바로 False로 넘어간다.
이때 실수한게 2는 짝수이면서 소수인데 깜빡해서 틀렸었다.
2는 꼭 소수로 체크해주자!