반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12977
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
배열 nums에서 임의의 숫자 3개를 선택하여 해당 수의 합이 소수가 되는 경우의 수를 구하는 문제이다. 소수란 1과 자기 자신 외의 약수를 가지지 않는 1보다 큰 자연수이다.
우선 배열에서 숫자를 가져올 때 3중 for문을 쓰는 게 생각났다. 하지만 너무 비효율적이라고 생각해서 고민해봤는데 도저히 답이 안나왔고, 구글링을 했을 때도 3중 for문을 써서 해결한 게 대부분이였다.
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++) {
int sum = nums[i] + nums[j] + nums[k];
answer += isPrime(sum) ? 1 : 0;
}
}
}
이후에 소수를 판별하는 클래스를 만들어주었다. 소수를 판별하는 방법은 크게 3가지가 있다.
1. 2부터 해당 숫자까지 나누기
2. 해당 숫자의 √N 까지 나누기
3. 에라토스테네스의 체
위 3가지 중에 본인이 원하는 방식으로 구현하면 된다. 나는 2번 방법으로 소수를 판별했다.
<최종코드>
class Solution {
public int solution(int[] nums) {
int answer = 0;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
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++) {
int sum = nums[i] + nums[j] + nums[k];
answer += isPrime(sum) ? 1 : 0;
}
}
}
return answer;
}
public boolean isPrime(int num) {
for (int i=2; i<=Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]JAVA - Level1. 폰켓몬 (0) | 2022.09.06 |
---|---|
[프로그래머스]JAVA - Level1. 신고 결과 받기 (0) | 2022.09.04 |
[프로그래머스]JAVA - Level1. 최소직사각형 (0) | 2022.09.03 |
[프로그래머스]JAVA - Level1. 같은 숫자는 싫어 (0) | 2022.09.01 |
[프로그래머스]JAVA - Level2. 가장 큰 수 (0) | 2022.09.01 |