Lv.1 - 소수 만들기

송철진·2023년 5월 22일
0
post-custom-banner

문제 설명

주어진 숫자 중 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

solution

function solution(nums) {
    nums.sort((a,b)=>a-b)
    let arr = []
    for(let i=0; i<nums.length-2; i++){
        for(let j=i+1; j<nums.length-1; j++){
            for(let k=j+1; k<nums.length; k++){
                arr.push(nums[i]+nums[j]+nums[k])
            }
        }
    }

    const max = arr[arr.length-1]

    for(let l=2; l<=max**.5; l++){
        for(let m=l*2; m<=max; m+=l){	
            arr = arr.filter(v=> v !== m)				 
        }
    }
    return arr.length
}

얼마전에 풀었던 에라토스테네스의 체를 이용한 풀이를 참고하여 풀어보았다.

주의! 서로 다른 세 수의 합이 서로 같은 경우가 존재할 수 있다.
그 합이 소수가 아니라면 Set에 넣어서 순회를 줄일 수 있겠지만
소수인 경우도 있을 수 있으므로 여기선 Set을 사용하면 안된다!

profile
검색하고 기록하며 학습하는 백엔드 개발자
post-custom-banner

0개의 댓글