본문 바로가기
Developer/Algorithm

프로그래머스 코딩테스트 연습 - 소수 만들기 (JavaScript)

by roqkfrlfhr 2022. 5. 13.

프로그래머스 코딩테스트 연습 - 소수 만들기 (JavaScript)

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중,

소수 만들기 문제를 JavaScript로 풀어보도록 하겠습니다.

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12977

 

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

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

programmers.co.kr

 

문제

문제셜명

주어진 숫자 중 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을 만들 수 있습니다.

 

작성한 답

solution.js

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++) {
                if (isPrime(nums[i] + nums[j] + nums[k])) {
                    answer++;
                }
            }
        }
    }
    
    return answer;
}

const isPrime = (n) => {
    for (let i = 2; i <= Math.sqrt(n); i++) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}

 

설명

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.

먼저 소수인지 아닌지를 판별하는 함수를 하나 만듭니다.

전달받은 매개변수의 값이 소수인지를 판별하기 위해서는 매개변수 값의 제곱근까지 숫자들에 대해

나누어 떨어지는 값이 있다면 소수가 아니고, 없다면 소수가 맞다고 반환합니다.

 

그리고 매개변수 nums 배열에서 3가지 숫자를 더하여 새로운 수를 만들어내는 과정을 간단하게 반복문을 사용하여

모든 숫자를 거치며 만들어낼 수 있는 모든 숫자를 만들어내고 만들어진 숫자를 미리 만들어둔 소수 판별 함수를 사용하여 소수인지 판별하고,

소수라면 answer의 값을 1씩 증가시켜준 뒤,

최종적으로 소수가 되는 경우의 개수를 반환하여 문제를 해결할 수 있습니다.

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글