본문 바로가기
알고리즘 스터디/[프로그래머스] 월간 코드 챌린지 시즌1

[알고리즘] 소수 만들기 문제풀이(자바스크립트 javascript)

by 제니운 2022. 7. 21.
728x90

👌 숫자 3개를 골라서 더 해주어야 하므로, i, j , l 모두 for문 돌려서 찾아야 한다.

 

for(var i=0; i<nums.length; i++){

   for(var j=i+1; j<nums.length; j++){

     for(var l=j+1; l<nums.length; l++)

 

nums가 [1,2,3,4]라고 할 때,

 

i=0,1,2,3을 모두 가지게 되면

j=1,2,3,4가 되니까 nums[4]의 값은 존재하지 않게 된다.

즉, nums.length의 길이가 한 개씩 줄어야 하는것.

 

for(var i=0; i<nums.length-2; i++){

   for(var j=i+1; j<nums.length-1; j++){

     for(var l=j+1; l<nums.length; l++)

 

👌 세 개를 더한 값이므로

 

먼저 변수를 위에 var number = 0 으로 지정해주고

 

number = nums[i] + nums[j] + nums[l]

 

👌 이 number가 소수인지 아닌지 판별하려면, 자연수로 나누었을 때 0으로 나누어지는데 그 자연수가 2개여야 한다.

예를 들어, 11을 0으로 나누어지게 하는 수는 1,11로 2개로 소수이다.

4를 0으로 나누어지게 하는 수는 1,2,4로 3개로 소수가 아니다.

그럼 이렇게 number를 자연수로 나누었을 때 0이 되는 자연수가 2개이면 된다.

 

if(number % k == 0) 라고 하기 위해선, k 가 자연수면서 상승해야 하니까

 

for(var k=1; k<=number; k++){

   if(number % k == 0)

 

여기서 number를 k로 나누었을 때 0이 되는 자연수의 개수를 세야 하니까

 

var count = 0

for(var k=1; k<=number; k++){

   if(number % k == 0) count++

 

count라는 변수를 주고, 개수를 세라고 한다.

 

👌 소수이려면, 이 개수가 2여야 하므로

 

if(count == 2) answer++

 

이렇게 자연수의 개수가 2이면 소수라고 판별이 되었기 때문에, answer로 꺼내준다.

 

 

✅ 최종 코드

 

function solution(nums) {
    var answer = 0, number=0;
    for(var i=0;i<nums.length-2;i++){
        for(var j=i+1;j<nums.length-1;j++){
            for(var l=j+1;l<nums.length;l++){
                number=nums[i]+nums[j]+nums[l];
                var count=0;
                for(var k=1;k<=number;k++){
                    if(number%k==0) count++;
                }
                if(count==2) answer++;
            }
        }
    }
    return answer;
}
728x90