문제 설명
주어진 숫자 중 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을 만들 수 있습니다.
나의풀이
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 sum = nums[i]+nums[j]+nums[k];
let cnt = 0;
for(let num=1; num<=sum; num++){
if(sum% num === 0){
cnt ++
}
if(cnt >2){
break;
}
}
if(cnt===2){
answer++;
}
}
}
}
return answer;
}
for문을 덕지덕지 사용해서 과연 정답이 맞을까 불안했지만 다행히 5점으로 통과했다 !
코드를 설명하자면 nums의 숫자 3개를 모두 더해보아야 하기 때문에 각각 i, j, k 로 인덱스를 구별하기 위해 선언해주었고 세 수를 더했을 때 소수인지 판별하기 위해 cnt 라는 변수를 만들어 0으로 나눠지는 수의 갯수를 세어 소수는 1과 자기 자신만을 갖기 때문에 cnt 가 2이상일때는 자동적으로 소수가 아니므로 for문을 빠져나오고 for문을 모두 돌았을 때 cnt 가 2일 때 즉 1과 자기 자신일 테니 그 때 answer를 증감해주었다.
for 문에서 빠져나오는 조건 중 nums.length 를 모두 썼는데 생각해보면 i와 j는 -2 -1 을 작성해야할 것 같다는 생각이 들었다.
'코테 준비' 카테고리의 다른 글
너비우선탐색 (BFS) 코플릿 풀기 (1) | 2023.05.06 |
---|