Notice
Recent Posts
Recent Comments
송민준의 개발노트
[프로그래머스] 소수 만들기 본문
https://programmers.co.kr/learn/courses/30/lessons/12977?language=java
코딩테스트 연습 - 소수 만들기
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때
programmers.co.kr
소수 알고리즘을 활용해서 계산하는 문제.
약수의 성질을 이용해서 2부터 주어진 수의 제곱근까지 확인만 하면 된다.(성능 개선)
약수의 성질?
- 모든 약수는 가운데 약수를 기준으로 곱셈 연산에 대해 대칭적인 구조
- ex) 16의 약수는 1, 2, 4, 8, 16 => 1 x 16, 2 x 8, 4 x 4
- 그러므로 특정한 자연수의 모든 약수를 찾을 때 가운데까지만 확인하면 됨.
class Solution {
public int solution(int[] nums) {
int answer = 0;
// 3가지 조합이니 3번 돌림
for(int i = 0; i < nums.length - 2; i++) {
for(int j = i+1; j < nums.length - 1; j++) {
for(int k = j+1; k < nums.length; k++) {
if(isPrimeNumber(nums[i] + nums[j] + nums[k])) {
answer++;
}
}
}
}
return answer;
}
// 약수 체크
public boolean isPrimeNumber(int v) {
for(int i = 2; i <= Math.sqrt(v); i++) {
if(v % i == 0) {
return false;
}
}
return true;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (0) | 2022.05.08 |
---|---|
[프로그래머스] 단체사진 찍기 (0) | 2022.05.07 |
[프로그래머스] 카카오프렌즈 컬러링북 (0) | 2022.04.30 |
[프로그래머스] 오픈채팅방 (0) | 2022.04.28 |
[프로그래머스] 더 맵게 (0) | 2022.04.25 |