프로그래머스 코딩테스트연습 소수 만들기

김영신·2022년 4월 13일
0
post-thumbnail
class Solution {
    public int solution(int[] nums) {
        int length = nums.length;

        int result = 0;

        for(int i = 0 ; i < length-2; i++){
            for(int j = i+1 ; j < length-1; j++){
                for(int k = j+1; k < length; k++){

                    int temp = nums[i] + nums[j] + nums[k];
                    boolean isFind = false;
                    for (int div = 2; div <= temp / 2; div++){
                        if(temp % div == 0) {
                        	isFind = true;
                            break;
                        }
                    }
                    if (!isFind) result++;
                }
            }
        }

        return result;
    }
}
for(int i = 0 ; i < length-2; i++)
   	for(int j = i+1 ; j < length-1; j++)
   		for(int k = j+1; k < length; k++)

문제에서 3개의 숫자를 중복없이 더 해주도록 for문을 사용해서 돌렸다.
과정 마지막에선 { . . . . . . num, num1, num2} 이 3가지의 숫자만 더할 것이기 때문에
i 는 length -2 까지
k는 length -1 까지
j는 length 까지 for문을 돌도록 하였으며,

제일 처음 반복할 시
{num1, num2, num3 . . . .} 이런 식으로 진행할 것이기 때문에
i = 0 번째 인덱스부터 시작
j = i + 1 번째 인덱스 부터 시작 (1번째)
k = j + 1 번째 인덱스 부터 시작 (2번째)
라는 조건을 걸었다.

int temp = nums[i] + nums[j] + nums[k]

temp 안에 3개의 숫자를 더한 값을 넣었고

boolean isFind = false;
for (int div = 2; div <= temp / 2; div++){
	if (temp % div == 0 ) {
   	 	isFind = true;
    	break;
    }
}
if (!isFind) result++;

temp ( 3개의 숫자를 더한 값 ) 을 /2 하면 for문을 다 돌지 않고 반만 돌게 된다.
그리고 1은 모든 수가 나누어 떨어지는 값이므로 제외하기 위해 2부터 돌게한다.
나누고 나머지가 0인 수를 발견했을 때 약수이므로 isFind = true로 변경해주고
약수를 찾았으니 소수가 아니므로 break로 for문을 탈출시켜준다.
만약 for문을 돌았을 때 약수를 발견하지 못했다면 result의 숫자를 1 증가시켜 준다.

profile
어제보다 오늘 더 Developer

0개의 댓글