알고리즘
순열 #프로그래머스 소수찾기
현쥬스주스
2021. 3. 30. 16:38
programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
[ 문제 해결방법 ]
- check라는 함수를 만들어서 소수를 판정
- 여기서, math.sqrt를 사용하는 이유는 제곱수의 경우 소수가 아니기 때문에 이를 통해 판정
- permutations를 이용해서 모든 경우의 수를 만들고 판정
- 단, 여기서 중복되는 수가 발생해서 set으로 미리 줄이고 하면 속도가 많이 빨라짐
- answer에 모든 소수를 집어넣고 길이를 출력하면 정답
[ 소스코드 ]
from itertools import permutations
import math
def check(n):
k = math.sqrt(n)
if n < 2:
return False
for i in range(2, int(k)+1):
if n % i == 0:
return False
return True
def solution(numbers):
answer = []
for k in range(1, len(numbers)+1):
perlist = list(map(''.join, permutations(list(numbers), k)))
for i in list(set(perlist)):
if check(int(i)):
answer.append(int(i))
answer = len(set(answer))
return answer