반응형
소수 만들기
문제 설명
주어진 숫자 중 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 |
입출력 예 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
문제 풀이
배열 안의 서로 다른 숫자 3개 더하기
처음엔 배열 메서드로 풀려고 했지만 결국 실패하고 3중 for문을 사용했다. 배열 안의 서로 다른 숫자를 골라 더하는 것은 서로 다른 인덱스를 골라 더하는 것과 같다. 즉, 길이가 4인 배열의 경우 인덱스 0+1+2, 0+1+3, 0+2+3, 1+2+3의 값을 구해 소수를 판별하면 된다.
let nums = [1,2,3,4];
let 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 sum = nums[i] + nums[j] + nums[k];
console.log(sum);
}
}
}
소수 판별 함수 구하기
구글에 'prime number js'를 검색하면 가장 위에 스택 오버 플로우 글이 있다. 소수 판별 함수를 여기서 쉽게 찾을 수 있었다.
코드
function solution(nums) {
let answer = 0;
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 sum = nums[i] + nums[j] + nums[k];
if(isPrime(sum)) answer++;
}
}
}
return answer;
}
function isPrime(sum) {
for(let i = 2; i < sum; i++)
if(sum % i === 0) return false;
return sum > 1;
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 | JavaScript (0) | 2021.06.19 |
---|---|
[프로그래머스] 키패드 누르기 | 카카오 인턴 코딩 테스트 | JavaScript (2) | 2021.06.18 |
[프로그래머스] 실패율 | 카카오 블라인드 코딩 테스트 | JavaScript (4) | 2021.06.16 |
[프로그래머스] 비밀 지도 | 카카오 블라인드 코딩 테스트 | JavaScript (2) | 2021.06.14 |
[프로그래머스] 다트 게임 | 카카오 블라인드 코딩 테스트 | JavaScript (2) | 2021.06.13 |