본문 바로가기
코테연습

50. 소수 만들기 javascript

by hxunz 2022. 5. 24.

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

 

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

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

programmers.co.kr

 

1.이해
주어진 숫자 중 3개의 수를 더해라
소수가 되는 경우의 개수를 구해라
 
2.계획
소수는 1과 자기자신만으로 나누어떨어진다.
모든 배수를 제거하고 남은 수가 소수다.
n까지의 배수를 구하려면 n의 제곱근 이하의 수의
모든 배수를 제거하면 된다.
2-1. 배열 내 소수 찾고 소수 몇갠지 1은 소수가 아니다
2-2. nums에 있는 3개의 숫자 더하는 함수를 만든다.
2-3. 위에서 나온 수들을 빈 배열 안에 담는다.
2-4. 소수 만드는 함수를 사용해서 소수를 찾아서 빈 배열에 담는다.
2-5. 이 배열의 길이를 구한다.

특정 숫자(n)이 소수인지 알기위해선 2부터 n -1 까지 나눴을때 나뉘는지 보면 됨
2부터 n의 제곱근을 한 수만큼만 나눠봐도 된다

 

const findPrime = (numbers) => {
    let primeCount = 0;
  for (i = 0; i < numbers.length; i++) {
    let isNotPrime = false;
      for (j = 2; j <= Math.floor(Math.sqrt(numbers[i])); j++) {
        if (numbers[i] % j === 0) {
          isNotPrime = true;
        } 
      }
    if (isNotPrime === false) {
      primeCount += 1;
    }
    }
    return primeCount;
};

function solution(nums) {
    let numbers = [];

  for (i = 0; i < nums.length; i++) {
    for (j = i+1; j < nums.length; j++) {
      for (k = j+1; k < nums.length; k++) {
        numbers = [...numbers,nums[i] + nums[j] + nums[k]];
      }
    }
  }
  return findPrime(numbers);
};

우선, 배열 내에서 숫자 세개를 임의로 더해서 새로운 배열을 리턴하는 함수를 만들었다.

for 반복문을 세번 돌았는데,, 

배열 내 요소들 세개를 더해야하기 때문,,

function solution(nums) {
let numbers = [];

for (i = 0; i < nums.length; i++) {
for (j = i+1; j < nums.length; j++) {
for (k = j+1; k < nums.length; k++) {
numbers = [...numbers,nums[i] + nums[j] + nums[k]];
}
}
}
return findPrime(numbers);
};

펼침 연산자를 사용하니까 새로 만든 숫자를 배열에 넣기가 수월했다.

 

이제 이 배열을 가지고 또 for 반복문을 해줬다..

숫자를 2부터 해당 숫자 크기까지 나눠봤을때 나눠지면 소수가 아님

근데 숫자를 다 돌기에는 너무 크니까 

숫자를 제곱근해준다.

예를들어, 숫자 20이 있으면 20의 제곱근 4,xxx 이걸 일단 내림해서 4으로 만들고
2부터3까지 나눠지는 숫자가 있는지 확인
4는 2로 나눠지니까 소수 탈락
for (i = 0; i < numbers.length; i++) {
let isNotPrime = false;
for (j = 2; j <= Math.floor(Math.sqrt(numbers[i])); j++)
 

이렇게 소수인지 아닌지 판별해서 소수면 primeCount에 1을 더해줬다.

if (numbers[i] % j === 0) {
isNotPrime = true;
}
}
if (isNotPrime === false) {
primeCount += 1;
}
}

그리고 return primeCount해주면 된다.

'코테연습' 카테고리의 다른 글

52. K번째수 Javascript  (0) 2022.05.25
51. 위장 Javascript  (0) 2022.05.25
49. 완주하지 못한 선수  (0) 2022.05.24
48. 내적  (0) 2022.05.19
47-2. 3진법 뒤집기(2)  (0) 2022.05.18

댓글