본문 바로가기
알고리즘

[프로그래머스 python, javascript] 소수구하기

by 새우하이 2021. 7. 1.

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

 

코딩테스트 연습 - 소수 만들기

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

programmers.co.kr

3중 for문을 사용해서 각 숫자들의 조합을 더해 소수인지 판별하기만 하면 되는 문제이다 

 

#javascript

function isPrime(n){
    for (var i = 2; i<n ; i++){
        if (n%i === 0){
            return false;
        }
    
    }
    return true
}

function solution(nums) {
    var answer = 0;
    for (var i=0 ; i<nums.length; i++){
        for (var j= i+1; j<nums.length; j++){
            for (var k = j+1; k < nums.length; k++){
                
                if (isPrime(nums[i] + nums[j] + nums[k]) === true){
                    answer++;
                }
            }
        }
    }

    return answer;
}

#python

def isPrime(n):
    for i in range(2,n):
        if n%i == 0:
            return False
    return True

def solution(nums):
    answer = 0

    for i in range(len(nums)):
        for j in range(i+1,len(nums)):
            for k in range(j+1,len(nums)):

                if isPrime(nums[i]+nums[j]+nums[k]):
                    answer += 1

    return answer

파이썬의 경우 itertools 의 combinations 사용으로 좀 더 쉽게 구현이 가능하다.

combinations는 요소의 조합을 반환해주는데

 

def isPrime(n):
    for i in range(2,n):
        if n%i == 0:
            return False
    return True

def solution(nums):
    from itertools import combinations as cb
    
    answer = 0
    for i in cb(nums, 3):
        if isPrime(sum(i)):
            answer += 1
    return answer

이렇게 cb로 별칭을 지정해서 조합의 결과물을 더한 값을 isPrime 함수를 통해 결과를 출력가능하다.

댓글