본문 바로가기
Algorithm/Programmers

[Programmers] 소수 만들기(JavaScript)

by 백승전 2022. 7. 29.

 

알림

 

본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.

 

문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

 

코드

 

function isPrime(n){
    for(let i = 2; i < n; i++){ // 본인 제외 나눴을 때 0이면 false
        if(n % i === 0) return false
    }
    return n >= 2; // 1 제외 숫자 return
}

function solution(nums) {
    let answer = 0;
    
    for(let i = 0; i <= nums.length; i++){ // 첫 번째
        for(let j = i + 1; j <= nums.length; j++){ // 두 번째
            for(let k = j + 1; k <= nums.length; k++){ // 세 번째
                let sum = nums[i] + nums[j] + nums[k]; // 숫제 3개 더하여
                if(isPrime(sum) == 1) answer += 1; // 약수면 개수 누적
            }
        }
    }
    return answer; // 정답 return
}

 

풀이

 

약수인지 아닌지 검사하는 함수를 한 개 더 만들었습니다.

해당 함수에 숫자 세 개의 합을 매개변수로 보내면 약수인지 아닌지 알 수 있고, 약수라면 개수를 체크해 줍니다.

 

우린 배열에서 세 개의 숫자를 가져와 이 세 개를 더해야 합니다.

따라서 반복문을 세 번 돌렸고, 한 번 돌릴 때마다 직전에 고른 숫자와 겹치지 않아야 하므로 초기값을 이전 반복문보다 +1만큼 지정해줘 각각 다른 숫자 세 개를 구하여 더할 수 있도록 합니다.

댓글