[programmers] 소수 만들기 (java) -1level

2022. 2. 28. 11:08Algorithm/Programmers

문제 설명

 

 

문제 해결

 

다른 방법이 없을까 하다가 결국 3중 for문을 이용해 인덱스의 값들로만 합을 구했다.

구한 값을 list.add를 통해 넣고 배열로 옮겨준다음 그 배열의 값들이 소수인지 판단하여 문제를 풀어주었다.

import java.util.ArrayList;

class Solution {
   public int solution(int[] nums) {
        int answer = 0;
        int cnt = 0, sum = 0;
        ArrayList<Integer> list = new ArrayList<>(); // 세개 수의 합을 담을 리스트
        for (int a = 0; a < nums.length; a++) {
            for (int b = a + 1; b < nums.length; b++) {
                for (int c = b + 1; c < nums.length; c++) {
                    sum = nums[a] + nums[b] + nums[c];
                    list.add(sum);
                }
            }
        }
        int[] arr = new int[list.size()];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = list.get(i);
        }
        // 소수를 구하기
        for (int i = 0; i < arr.length; i++) {
            cnt = 0;
            for (int j = 1; j <= arr[i]; j++) {
                if (arr[i] % j == 0) cnt++;
            }
            if (cnt == 2) answer++;
        }
        return answer;
    }
}

 

+ ) 메서드를 이용해 깔끔하게 다시 정리

 

import java.util.ArrayList;

public class 소수만들기 {
    public int solution(int[] nums) {
        int answer = 0;
        int sum = 0;
        ArrayList<Integer> list = new ArrayList<>(); // 세개 수의 합을 담을 리스트
        for (int a = 0; a < nums.length; a++) {
            for (int b = a + 1; b < nums.length; b++) {
                for (int c = b + 1; c < nums.length; c++) {
                    sum = nums[a] + nums[b] + nums[c];
                    if (isPrime(sum)) answer++;
                }
            }
        }
        return answer;
    }
    public static boolean isPrime(int n) {
        boolean istrue = true;
        for (int i = 2; i < n; i++) {
            if (n % i == 0) { // 소수가 아닐 때
                istrue = false;
                break;
            }
        }
        return istrue;
    }
}
728x90