본문 바로가기

알고리즘 문제

프로그래머스 소수 만들기

주어진 배열에서 3개의 숫자를 합한 뒤 이게 소수인지 판별하고 몇 개의 소수가 만들어질 수 있는지 출력해야 한다.

배열에서 3개의 수를 어떻게 빼야하는 지 감도 안왔다...

for문 3개를 써서 조합을 만들어준다.

findPrime에 숫자 3개의 합을 매개변수로 건내주고 s라는 숫자를 2부터 s-1까지의 숫자로 일일이 나눈다. 나누어 떨어지는 게 있으면 소수가 아니므로 False 반환, 나누어 떨어지지 않으면 True를 반환.


에라토스테네스의 체를 쓰려면 아마 2부터 3000까지의 소수를 구하고 배열에 집어 넣은 뒤 일일이 비교하면 될 것 같다.


def findPrime(s):
for i in range(2,s):
if s%i==0:
return False
return True
def solution(nums):
length=len(nums)
s=0
count=0
for i in range(length):
for j in range(i+1,length):
for k in range(j+1,length):
s+=nums[i]+nums[j]+nums[k]
if findPrime(s)==True:
count+=1
s=0
return count

print(solution([1,2,3,4]))
print(solution([1,2,7,6,4]))


https://programmers.co.kr/learn/courses/30/lessons/12977?language=python3