https://school.programmers.co.kr/learn/courses/30/lessons/12977
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예

입출력 예 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
//반복문 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++){
list.add(nums[i]+nums[j]+nums[k]);
}
}
}
for(int i=0;i<list.size();i++){
int cnt =0;
for(int j=2;j<list.get(i);j++){
if(list.get(i) % j == 0){
break;
}else{
cnt++;
}
}
if(cnt == list.get(i)-2){
answer++;
}
}
return answer;
}
}
이렇게까지 길어질 필요가 없을 것 같은데...머리가 돌아가지 않는다...ㅠㅠ
일단, 모든 숫자의 합을 list에 저장해주고
소수는 2부터 판별하는 숫자-1까지 나눠서 나머지가 없을 경우에만 해당되니
리스트 값 하나씩 소수 판별해 주면 끝!
++++++
또 다른 풀이!
import java.util.*;
class Solution {
public boolean isPrime(int sum){
for(int i=2;i<sum;i++){
if(sum % i == 0){
return false;
}
}
return true;
}
public 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;
}
}
메서드를 하나 생성해서 소수 처리는 isPrime()에서 처리하고
true값이 들어갈 때만 answer++해주기!
'코딩테스트 > JAVA' 카테고리의 다른 글
| [JAVA/프로그래머스] 이진 변환 반복하기 (0) | 2023.09.21 |
|---|---|
| [JAVA/프로그래머스] 기사단원의 무기 (0) | 2023.09.20 |
| [JAVA/백준] 대표값2 (0) | 2023.09.17 |
| [JAVA/백준] 킹, 퀸, 룩, 비숍, 나이트, 폰 (1) | 2023.09.16 |
| [JAVA/백준] 커트라인 (0) | 2023.09.16 |