문제링크:https://programmers.co.kr/learn/courses/30/lessons/42839
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.제한 조건
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.입출력 예
number return "17" 3 "011" 2
from itertools import permutations
import math
def solution(numbers):
# numbers의 값들을 하나씩 잘라서 저장
n_list = [n for n in numbers]
result = []
for i in range(len(n_list)):
# 만들 수 있는 순열 구하기
result += list(permutations(n_list,i+1))
# 만들어진 순열 리스트로 저장
t_list = [int(''.join(r)) for r in result]
t_list = set(t_list) # set으로 중복 제거
answer = []
for t in t_list:
# 0과 1은 소수가 아님
if int(t) == 0 or int(t) == 1:
continue
check = True
# 소수인지 확인
for i in range(2, int(math.sqrt(int(t))+1)):
if int(t) % i == 0: # 나누어떨어지면 소수가 아님.
check = False
break
# 소수만 저장
if check:
answer.append(t)
return len(answer)
입력받은 numbers를 가능한 모든 순열을 구한다. 구한 순열들을 리스트에 넣어주고, 중복을 제거한다. 그리고 리스트에 들어있는 값이 소수인지 아닌지 확인.