[Level1/Python3] 소수 만들기

코딩테스트/프로그래머스

[Level1/Python3] 소수 만들기

휴전 2022. 7. 29. 23:46

본 글은 프로그래머스 문제를 기반으로 작성한 글입니다. (https://school.programmers.co.kr/learn/courses/30/lessons/12977)

 

문제 설명

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

 

제한사항

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

 


내 생각

흐름

 1) 배열 인덱스 3개 뽑기 : 숫자 3개를 어떤 순서로 더하든 상관없으므로 인덱스 순서 상관없음

  • itertools에 있는 combinations 쓰면 인덱스 3개 뽑는데 한 줄 걸리는 거 알지만 사용하지 않는 방안에 대해 생각
  • 결국 안돼서 3중 for문 씀

 2) 숫자 더하기

 3) 그 숫자가 소수인지 판단하기

  • 소수 판단은 해당 숫자의 제곱근 (** 0.5)까지 해주면 됨

 

 

작성한 코드

def solution(nums):
    answer = 0
    
    INDEX = []
    for i in range(len(nums)-2):
        for j in range(i+1, len(nums)-1):
            for k in range(j+1, len(nums)):
                INDEX.append([i, j, k])

    for i, j, k in INDEX:
        n = nums[i] + nums[j] + nums[k]
        
        if n % 2 == 0:
            continue
        
        isPrime = True
        for w in range(2, int(n**0.5)+1):
            if n % w == 0:
                isPrime = False
                break
                
        if isPrime:   
            answer += 1
        
    return answer