본문 바로가기

코딩일기

알고리즘 코드카타 58 - 소수 만들기 (복습)

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다
from itertools import combinations as c

def solution(nums):
    answer = 0
    sums = []

 

모든 조합을 구하기 위해서 itertools을 임포트한다.

 

 

def solution(nums):
    answer = 0
    sums = []
    
    for num in c(nums, 3):
    	print(sum(num))

 

각 조합의 합계를 구한다.

 

def solution(nums):
    answer = 0
    sums = []
    
    for num in c(nums, 3):
        sums.append(sum(num))
        
    print(sums)

 

구해진 합계를 sums 리스트에 저장한다.

 

 

def is_prime(n):
    if n <= 1:
        return False
    if n % 2 == 0:
        return False
    i = 3
    while i ** 2 <= n:
        if n % i == 0:
            return False
        i += 2
    return True

 

sums안의 정수들이 소수인지 아닌지 판정하는 함수를 작성한다.

 

def solution(nums):
    answer = 0
    sums = []
    
    for num in c(nums, 3):
        sums.append(sum(num))
    
    for n in sums:
        if is_prime(n):
            answer += 1
    
    return answer

 

작성한 소수판정 함수를 이용해서 sums리스트에서 소수의 갯수를 세면 완료!