본문 바로가기
카테고리 없음

[프로그래머스 스킬체크 레벨 1] 소수 만들기 풀이 및 설명 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 24.
728x90

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

 

기본 제공 틀

 

function solution(nums) {
    var answer = -1;
    
    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    console.log('Hello Javascript')
    
    return answer;
}

 

풀이 [JavaScript]

 

728x90

들어온 nums를 splice처리할거라 tmp에 복사본을 만들어주고, 첫번째 값을 first에 넣고 그 값을 tmp에서 제거해줍니다.

첫번째 숫자를 뺀 nums배열에서 나머지 두 값을 픽해야하기 때문에, tmp2에 첫번째 값을 제거한 수들을 넣어줍니다.

그리고, tmp2를 돌면서 중복되지 않게 splice를 해주면서 두번째, 세번째 값들을 numbers에 넣어줍니다.

그리고, numbers에 추가된 first, second. third값을 reduce함수를 사용하여 값을 다 더해준 배열을 만든 후, numbers를 돌면서 1으로는 어차피 다 나누어지므로, 2이상의 숫자부터 자기 자신의 숫자까지 돌면서 자기 자신의 숫자가 아닌 다른 숫자로 나누었을 때, 나머지가 0인 경우에는 numbers에서 제거해주었습니다. 그러면, numbers에는 소수만이 남게되고, 그 값을 리턴해주면 됩니다.

function solution(nums) {
    var numbers = [];
    var tmp = nums.filter(v => v);
    for(var i=tmp.length-1; i>=0; i--){
        var first = tmp[i];
        var second = 0;
        var third = 0;
        tmp.splice(i, 1);
        var tmp2 = tmp.filter(v=>v);
        for(var j=tmp2.length-1; j>=0; j--){
            second = tmp2[j];
            tmp2.splice(j, 1);
            for(var k=tmp2.length-1; k>=0; k--){
                third = tmp2[k];
                numbers.push([first, second, third]);
            }
        }
    }
    numbers = numbers.map(n => n.reduce((a, v) => a + v, 0));
    for(var m=numbers.length-1; m>=0;m--){
        for(var n=2; n<numbers[m]; n++){
            if(numbers[m]%n ===0 && n !== numbers[m]){
                numbers.splice(m, 1);
            }
        }
    }
    return numbers.length;
}

채점 결과 [JavaScript]

728x90

댓글