SprintersSprinters

[프로그래머스] 소수 만들기 | Summer/Winter 코딩 테스트 | JavaScript

소수 만들기

문제 설명

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

제한 사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.

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

입출력 예

nums

result

[1,2,3,4]

1

[1,2,7,6,4]

4

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

[1,4,6]을 이용해서 11을 만들 수 있습니다.

[2,4,7]을 이용해서 13을 만들 수 있습니다.

[4,6,7]을 이용해서 17을 만들 수 있습니다.

문제 풀이

배열 안의 서로 다른 숫자 3개 더하기

처음엔 배열 메서드로 풀려고 했지만 결국 실패하고 3중 for문을 사용했다. 배열 안의 서로 다른 숫자를 골라 더하는 것은 서로 다른 인덱스를 골라 더하는 것과 같다. 즉, 길이가 4인 배열의 경우 인덱스 0+1+2, 0+1+3, 0+2+3, 1+2+3의 값을 구해 소수를 판별하면 된다.


let nums = [1,2,3,4];
let len = nums.length;

for(let i = 0; i < len; i++) {
    for(let j = i+1; j < len; j++) {
    	for(let k = j+1; k < len; k++) {
            const sum = nums[i] + nums[j] + nums[k];
            console.log(sum);
        }
    }
}
스크린샷 2021-06-17 오후 3.38.38.png
sum 결과값

소수 판별 함수 구하기

구글에 'prime number js'를 검색하면 가장 위에 스택 오버 플로우 글이 있다. 소수 판별 함수를 여기서 쉽게 찾을 수 있었다.

스크린샷 2021-06-17 오후 3.41.42.png
이미지 출처 - https://stackoverflow.com/questions/40200089/number-prime-test-in-javascript

코드


function solution(nums) {
    let answer = 0;
    const len = nums.length;
    
    for(let i = 0; i < len; i++) {
        for(let j = i+1; j < len; j++) {
            for(let k = j+1; k < len; k++) {
                const sum = nums[i] + nums[j] + nums[k];
                if(isPrime(sum)) answer++;
            }
        }
    }
    return answer;
}

function isPrime(sum) {
    for(let i = 2; i < sum; i++)
    if(sum % i === 0) return false;
    return sum > 1;
}

김병연 프로필 이미지

작성자

김병연

기록 144

안녕하세요, Sprinters를 만든 사람입니다.

시리즈와 댓글을 불러오는 중…