오구의코딩모험

[Python] 소수 찾기 본문

프로그래밍 공부/프로그래머스

[Python] 소수 찾기

오구.cpp 2023. 1. 3. 22:12
반응형

[코딩테스트 고득점 KIT - 완전탐색]

 

 

모든 경우의 수를 탐색하기 위해 순열을 사용하였다.

 

"011" 와 "11"은 같은 수 이기 때문에

중복 제거를 위해 answer을 set()로 만들어 주었다.

 

약수는 곱의 형태로 반복되기 때문에 제곱근+1 까지만 반복문을 실행한다.

ex) 24의 약수 = 1, 2, 3, 4, 6, 8, 12, 24  →1*24, 2*12, 3*8, 4*6,  따라서 24는 2로 나눠지면서 12로도 나눠지는 수 

 

나누어진다면, 1과 자기 자신만이 약수로 갖는 소수가 아닌 합성수이다.

합성수가 아닌 수는 소수.

 

소수를 담은 리스트의 길이를 반환하면 끝.

 

from itertools import permutations
import math
def solution(numbers):
	# 중복 제거
    answer = set()
    
    for i in range(len(numbers)):
    	# 순열을 통한 경우의 수 실행
        for number in list(permutations(numbers,i+1)):
        	# 문자열 -> 정수
            target = int(''.join(number))
            
            # 2와 3도 소수
            if target == 2 or target == 3:
                answer.add(target)
                continue
            
            # 약수는 곱의 형태로 반복되기 때문에 제곱근+1 까지
            for j in range(2, int(math.sqrt(target)+1)):
            	# 합성수
                if target % j == 0:
                    break
               	# 소수
                elif j == int(math.sqrt(target)):
                    answer.add(target)
    return len(answer)
반응형
Comments