한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
numbers return
"17" 3
"011" 2
- numbers의 길이만큼 r 값을 지정하여 조합으로 모든 경우의 수를 찾음
- 경우의 수 중 0으로 시작하는 경우 제거
- 해당 값이 소수인지 판별
Code_1 - 실행 오류
import itertools, math def prime(n): for i in range(2, int(math.sqrt(n)+1)): if n % i == 0: return False return True # 소수인 경우 def solution(numbers): answer = 0 numbers = list(numbers) for r in range(1, len(numbers)+1): per = set(list(itertools.permutations(numbers, r))) for p in per: if p[0] != str(0): p = ''.join(p) if prime(int(p)) == True: answer += 1 return answer-1
- 조합이 1인 경우를 제외하지 않아서 생긴 문제
Code_2 - 성공
import itertools, math def prime(n): for i in range(2, int(math.sqrt(n)+1)): if n % i == 0: return False return True # 소수인 경우 def solution(numbers): answer = 0 numbers = list(numbers) for r in range(1, len(numbers)+1): per = set(list(itertools.permutations(numbers, r))) for p in per: if p[0] != str(0): p = ''.join(p) if prime(int(p)) == True and int(p) != 1: answer += 1 print(p) return answer