반응형
프로그래머스 programmers Level1 소수 만들기 - java
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12977
[풀이]
서로 다른 3개의 숫자를 더한 값이 소수인지 판별하는 문제이다.
그냥 간단하게 중첩 for 문을 이용했다.
포인트는 서로 다른 3개를 골라 더한 값을 판별하는 것이다.
따라서 중첩 for 문에서 인덱스를 1씩 더해주며 값을 더해 소수인지 판별해주어야 한다.
예를들면 nums = [1,2,3,4] 인 경우, 아래의 경우가 된다.
[1, 2, 3] , [1, 2, 4], [1, 3, 4] , [2, 3, 4]
인덱스로 하면 다음과 같다.
[0, 1, 2] , [0, 1, 3] , [0, 2, 3] , [1, 2, 3]
즉, i = 0 이면 j = i + 1 , n = j + 1 로 루프 해주어야 한다.
[java 코드]
public int solution(int[] nums) {
int answer = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
for (int n = j + 1; n < nums.length; n++) {
int sum = nums[i] + nums[j] + nums[n];
if (isPrime(sum)) {
answer++;
}
}
}
}
return answer;
}
/**
* 소수판별
* @param sum 3개 더한 값
* @return 소수이면 true 아니면 false
*/
private boolean isPrime(int sum) {
boolean result = true;
int divideCnt = 0;
for (int i = 1; i <= sum; i++) {
if (sum % i == 0) {
divideCnt++;
}
if (divideCnt > 2) {
result = false;
}
}
return result;
}
반응형