아이디어는 어렵지 않았지만, 구현하기 꽤 까다로웠다.
소수를 일일이 판별할 생각은 했지만 찾다 보니 에라토스테네스의 채라는 개념을 보고 아이디어를 얻어 풀었다.
해당 포스트는 아래 첨부한다.
일단 직관적으로 풀었지만, 애초에 2 미만은 제거한다던지 하면 한번 필터하는 작업을 없앨 수 있을 것 같다.
그리고 순열을 구하는 것에 머리가 아팠지만 permutation 라는 걸 쓰면 순열도 쉽게 만들 수 있다더라~~
"""
여러개의 수가 소수인지 아닌지 -> 에라토스테네스의 체
이 수가 소수인지 아닌지 -> 제곱근 까지 나누기
소수 중엔 2빼곤 짝수가 없다.
numbers 의 가능한 모든 조합을 만듬 -> 짝수 제외
가장 큰 수의 에라토스테네스 체를 통해 소수들 구함
교집합
"""
import math
def allCombi(numbers):
elements = set()
if len(numbers) == 1:
return [numbers]
for i in range(len(numbers)):
current = numbers[i]
remain = numbers[:i] + numbers[i+1:] # cuurent 빼고 만든 조합
elements.add(current)
for p in allCombi(remain):
elements.add(current+p)
return elements
def sosu(num):
array = [True for _ in range(num+1)]
for i in range(2, int(math.sqrt(num))):
if array[i]:
j = 2
while i * j <= num:
array[i*j] = False
j += 1
true_indices = [index for index, value in enumerate(array) if value]
return true_indices
def solution(numbers):
elements = allCombi(numbers)
elements_int = [x for x in map(int, elements) if x >= 2]
max_ele = max(elements_int)
sosu_li = sosu(max_ele)
intersection = list(set(elements_int) & set(sosu_li))
answer = len(intersection)
return answer
[알고리즘] 소수의 판별 - 에라토스테네스의 체
알고리즘 - 소수의 판별
velog.io
[Python] permutation, combination 순열과 조합
Python의 itertools를 이용하면 순열과 조합을 for문 없이 구현할 수 있다.
velog.io
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 게임 맵 최단거리 - BFS (0) | 2024.10.26 |
---|---|
[프로그래머스] 더 맵게 - 힙, 힙큐 (0) | 2024.10.25 |
[프로그래머스] 표편집 - 스택, 인덱스 리스트, 링크드 리스트 (1) | 2024.10.16 |
[프로그래머스] 괄호 회전하기 - 스택,큐 (0) | 2024.10.12 |
[프로그래머스] 크레인 인형뽑기 게임 - 큐,스 (1) | 2024.10.11 |