문제
https://programmers.co.kr/learn/courses/30/lessons/12977
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
풀이
간단한 문제다. 숫자 세개 뽑을 때 인덱스만 좀 신경써주자.
나는 옛날에 풀었던 시간복잡도에 걸리지 않게 소수 체크하는 방법을 복습할겸 그 때 풀었던 방법으로 풀었는데
이 문제에선 그냥 일반적인 방법대로 풀어도 괜찮다. 그냥 일반적인 방법은 아래와 같다. 일반적인 방법은 for문에서 조건절이 i<n이고 앞서 말한 방법에서는 i*i<=n임에 유의하자.
public static boolean isPrime(int n) {
boolean test=true;
for(int i=2;i<n;i++) {
if(n>1&&n%i==0) {
test=false;
break;
}
}
if(n<=1) test=false;
return test;
}
코드
package Level1;
public class 소수만들기 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(solution(new int[] {1,2,3,4}));
}
public static int solution(int [] nums) {
int answer=0;
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];
if(isPrime(sum)) {
answer++;
}
}
}
}
return answer;
}
public static boolean isPrime(int n) {
boolean test=true;
for(int i=2;i*i<=n;i++) {
if(n>1&&n%i==0) {
test=false;
break;
}
}
if(n<=1) test=false;
return test;
}
}
'알고리즘연습 > Programmers' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 java 자바 (0) | 2021.05.19 |
---|---|
[프로그래머스] 오픈채팅방 java 자바 (0) | 2021.05.17 |
[프로그래머스] 더 맵게 java 자바 (0) | 2021.05.13 |
[프로그래머스] 문자열 압축 자바 java (0) | 2021.05.11 |
[프로그래머스] 124 나라의 숫자 java 자바 (0) | 2021.05.09 |