본문 바로가기
[개발] 코딩테스트/프로그래머스

[프로그래머스]소수 만들기 / Javascript

by hmmmm_ 2022. 4. 20.

[문제 바로가기]

Summer/Winter Coding(~2018) > 소수만들기  (Lv.1)

 

[ 문제 파악 ]

배열 중 3개의 수를 골라 더한 수가 소수인지 파악

소수인 수들의 개수를 출력하는 문제

 

1. 3수를 더하는 함수

2. 소수인지 아닌지 판단하는 함수

2-1. 소수일때마다 개수는 +1씩해줌

 

[ 적용한 풀이 ]

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

let minority = (num) =>{
  for (let i = 2; i < num; i++) {
    if (num % i == 0) return false;
  }
  return num > 1;
}
// 소수 찾기 제곱이용
// 애초에 3을 더하는데 문제 조건에서 배열 내부에 중복된 수가 없다고 함
// 3개의 합이 가장 작다고 했을 때, 1+2+3 = 6이 최소 수 
function minority(number) { 
	if(number % 2 === 0) return false;  // 나올수있는 짝수 기준으로 모든 짝수는 소수가 아님
    for(let i = 3; i * i <= number; i+=2) { // 나올수있는 홀수 기준으로 모든 홀수를 체크
    	if(number % i === 0) return false;  // 자기 자신을 곱해서 number가 되면 그 수도 이미 소수가 아니므로 제외
    } 
    return true 
}

[해결 과정 중 실수한 부분 / 잡담]

소수 너무 오랜만에 들어봐서 구글링해봤다 (부끄)

그간 짧게 작성해 푼 문제들이 많아서 그런지 저렇게 for문을 반복해서 쓰는게 맞는건지 의심스러웠다.

sum이나 map이나 reduce로 할 수 있는 방법들이 있지 않을까 했는데 

그냥 저렇게 풀었다.

 

소수 부분은 다른 사람들의 것을 참고 했는데

몇몇 풀이에서는 제곱근을 사용한 풀이(해당글)도 있었다.

코드를 가지고 와서 조금 생각해보니 적절하게 분기를 해서 좋은 코드라고 느꼈다.

성능 또한 확실히 좋았다. 분기도 적절하게 되니 확인하는 숫자들이 적어져서 그렇다고 생각했다.

 

댓글