(WiP)(H) 프로그래머스 #JavaScript - 소수만들기

SSO·2020년 2월 13일
0

프로그래머스Lv1

목록 보기
47/47

문제

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

풀이

//1. 나의 풀이
function solution(nums) {
    var answer = 0;
    var combi = [];
    var all = [];
  var notPrime = 0;
    
    // 3개 조합 만들기
    for(var i=0; i<nums.length; i++){
      for(var j=i+1; j<nums.length; j++){ 
        for(var k=j+1; k<nums.length; k++){
            combi.push(nums[i]);
            combi.push(nums[j]);
            combi.push(nums[k]);
            all.push(combi);
            combi = [];
//          break; // 주의: break쓰면 안됨. combi를 빈배열로만 만들면 초기화 됨.
        }
      }
    }
  
  // 합이 소수인지 확인하기
  for(var x=0; x<all.length; x++){
    
    // 합 구하기
    var sum = 0;
    sum = all[x].reduce((a,c)=>a+c);
    
    // 소수 확인
    for(var y=2; y<sum; y++){
     if(sum%y === 0){
       notPrime = notPrime + 1;
       break;
     } 
    }
  }
  answer = all.length - notPrime;
  
    return answer;
}

//2. 다른풀이
function solution(nums) {
    let answer = 0;
    
    //1. 3자리 숫자 만들기
    const len = nums.length;
    for (let i = 0; i < len; i++){
        for (let j = i+1; j < len; j++){
            for (let k = j+1; k < len; k++) {
                const number = nums[i]+nums[j]+nums[k];
                if (isPrime(number))
                    answer++;
            }
        }
    }

    //2. 소수 판별(2~number까지 하나씩 비교)
    function isPrime(number){
        if (number < 2) return true;
        for (let i = 2; i < number; i++){
            if (number % i == 0) return false;
        }
        return true;
    }
    
    return answer;
}
//https://akh95123.blogspot.com/2019/10/javascript_21.html

더 생각해보기

for문 반복 사용으로 조합을 만들어도 효율성에 문제가 없는지?

참고사항

#조합
2020 Lv2 -> 2021 Lv1으로 이동

profile
happy

0개의 댓글