반응형
https://programmers.co.kr/learn/courses/30/lessons/12977
//nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return하라!!
//{1, 2, 3, 4} 가 잇으면 -> {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4} 총 4개의 경우의 수가 나오고 이 중 {1,2,4}가 7 이기에 소수이다.
class Solution {
int answer = 0;
public int solution(int[] nums) {
int sum = 0;
//첫번째 인덱스는 맨마지막의 인덱스까지 가지 않는다 왜?? 총 3개의 숫자를 뽑기때문에 맨 마지막 인덱스의 -2번째 까지만 선택한다..!
//ex) {1,2,3,4,5} 의 모든 경우의수 중 순차적으로 3개의 숫자를 뽑을때 맨 마지막 경우의수는 {3,4,5}가 될것이다.
//이때 nums.length = 4일것이고 첫번째는 숫자는 3이 뽑아져나와야하니까 인덱스는 4-2 =2 인 nums[2]가 될것이다.
for(int i=0; i<nums.length-2; i++){
//시작은 i와 겹치면 안되니때문에 i+1번째 인덱스부터 뽑아온다..!
//두번째 인덱스도 맨마지막의 인덱스까지 가지 않는다..! 이것도 마찬가지로 총 3개를 뽑기 때문에 맨 마지막 인덱스의 -1번째 까지만 선택하게된다..!
//ex) {1,2,3,4,5} 의 모든 경우의수 중 순차적으로 3개의 숫자를 뽑을때 맨 마지막 경우의수는 {3,4,5}가 될것이다.
//이때 nums.length = 4일것이고 두번째는 숫자는 4이 뽑아져나와야하니까 인덱스는 4-1 =3 인 nums[3]가 될것이다.
for(int j=i+1; j<nums.length-1; j++){
//시작은 i, j와 겹치면 안되기때문에 j+1번째 인덱스부터 뽑아온다..!
for(int k=j+1; k<nums.length; k++){
//세개의 숫자를 더한다..!
sum = nums[i]+nums[j]+nums[k];
//소수를 찾아야한다..!
//소수의 정의가 무엇인가...약수가 1과 자기자신으로 되어있어야하지 않은가..
//1과 자기자신을 제외하고 두 사이에 있는 숫자로 자기자신을 나누었을때 나머지가 0이 아니면 소수다..(맞나..?)
sosuCount(sum);
}
}
}
return answer;
}
//소수인지 아닌지 판별한다.
public void sosuCount(int sum){
boolean check = false;
for(int i=2; i<=sum-1; i++){
if(sum%i == 0){
//이 if문에 한번이라도 들어오면 소수가 아니기 때문에 반복문을 나간다..!
check = true;
break;
}
}
if(!check){
answer++;
}
}
}
반응형
'코딩테스트 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 1단계 - 문자열 내 p와 y의 개수 (0) | 2021.04.29 |
---|---|
프로그래머스 1단계 - 문자열 내림차순으로 배치하기 (0) | 2021.04.29 |
프로그래머스 1단계 - 서울에서 김서방 찾기 (0) | 2021.04.28 |
프로그래머스 1단계 - 문자열 다루기 기본 (0) | 2021.04.28 |
프로그래머스 1단계 - 내적 (0) | 2021.04.27 |