https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
풀이 과정
numbers 문자열의 각 문자로 몇 개의 소수를 만들 수 있는지 반환해줘야 한다.
나올 수 있는 최대 수까지 에라토스테네스의 체를 사용해 소수를 미리 구해준 후, numbers의 각 문자로 만들 수 있는 모든 숫자의 쌍을 permutations 모듈을 이용하여 구해주었다. 그 후, 숫자가 소수면 정답 후보 리스트에 넣고, 정답 후보 리스트를 set으로 바꿔줬다가 list로 바꿔줘서 중복을 제거한 후, 리스트의 원소의 개수를 리턴하여 답을 구하였다.
소스 코드
from itertools import permutations
def solution(numbers):
max_number = 10000001
check = [False for _ in range(max_number)]
check[0], check[1] = True, True
for i in range(2, max_number):
if not check[i]:
for j in range(2*i, max_number, i):
check[j] = True
numbers = list(str(numbers))
number_list = []
for i in range(1, len(numbers) + 1):
for j in permutations(numbers, i):
temp = int(''.join(j))
if not check[temp]:
number_list.append(temp)
return len(list(set(number_list)))
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 타겟 넘버 [파이썬] (0) | 2022.06.27 |
---|---|
프로그래머스 - 이상한 문자 만들기 [파이썬] (0) | 2022.06.26 |
프로그래머스 - 가장 큰 수 [파이썬] (0) | 2022.06.23 |
프로그래머스 - 더 맵게 [파이썬] (0) | 2022.06.23 |
프로그래머스 - 기능개발 [파이썬] (0) | 2022.06.22 |