오뚝이개발자

소수 만들기 본문

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

소수 만들기

땅어 2020. 9. 6. 14:25
728x90
300x250

문제설명

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


제한사항

 

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

 

 


입출력 예


입출력 예에 대한 설명

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.


풀이

큰 틀에서 보고 문제의 해결 방법을 순서대로 정리해보면 크게 2가지로 나눌 수 있다. 1) 세 원소 뽑기(조합) 2) 합이 소수인지 판별 과 같이 말이다. 먼저 중복없이 세 원소를 뽑기 위해선 3중for문을 사용하였다.(itertools의 combinations를 import하면 더 간단히 구현 가능하지만 여기선 최대한 모듈의 도움없이 구현해보기 위해 이와 같이 하였다.) 다음으로 합이 소수인지 판별하기 위해선 함수 안에 isprime이라는 함수를 만들었다. 직관적인 부분이라 코드를 보면 이해가 될 것이다.

def solution(nums):
    answer = 0
    
    def isprime(a):
        for div in range(2, a//2+1):
            if a%div==0:
                return True
        return False
    
    for i in range(0,len(nums)-2):
        for j in range(i+1,len(nums)-1):
            for k in range(j+1,len(nums)):
                sum=nums[i]+nums[j]+nums[k]
                
                if not isprime(sum):
                    print(nums[i], nums[j], nums[k])
                    answer+=1
            
    return answer

 

728x90
300x250

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

영어 끝말잇기  (0) 2020.09.07
점프와 순간이동  (0) 2020.09.06
멀쩡한 사각형  (0) 2020.09.05
스킬트리  (0) 2020.09.05
문자열 압축  (0) 2020.09.03
Comments