[프로그래머스] 소수 만들기(javascript)

프린이·2020년 11월 25일
0

  • 제 코드는 최선의 방안은 아닙니다.
  • 단순히 기록용, 공유용이니 이 점 보실 때, 참고바랍니다!

🔗 문제 링크

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

📙 내가 생각한 풀이 과정

  • 배열의 index를 3개의 조합인 모든 경우의 수를 구해 모든 경우의 수의 조합으로 덧셈한다.
  • 덧셈의 결과값이 소수면 answer값에 1을 더한다.
  • 최종적으로 모든 경우의 수 중 소수가 몇 개 인지를 answer의 값을 통해 알 수 있게 한다.

📝 답안 코드

function solution(nums) {
    var answer = 0;
    var tmp = nums.map((val,index)=>index);
    var arr = getCombinations(tmp,3);
    for(var i = 0; i < arr.length; i++){
        var sum = 0;
        for(var j = 0; j < arr[i].length; j++){
            sum += nums[arr[i][j]];
        }
        if(prime(sum))
            answer++;
    }
    return answer;
}
 //조합 알고리즘
function getCombinations(arr, selectNumber) {
	var results = [];
	if (selectNumber === 1) return arr.map((value) => [value]);
	
	arr.forEach((fixed, index, origin) => {
		var rest = origin.slice(index + 1);
		var combinations = getCombinations(rest, selectNumber - 1); 
		var attached = combinations.map((combination) => [fixed, ...combination]);
		results.push(...attached);
	});
	
	return results;
}
//소수면 true 아니면 false 반환하는 함수
function prime(num){
    var cnt = 0;
    if(num > 1){
        for(var i = 1; i <= num; i++){
            if(num%i == 0)
                cnt++;
            if(cnt > 2)
                return false;
        }
        if(cnt <= 2)
            return true;
    }else
        return false;
}
profile
주니어 프론트엔드개발자

0개의 댓글