(Java)프로그래머스 - 소수 만들기

윤준혁·2024년 2월 29일

나의 풀이

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                for (int k = j + 1; k < nums.length; k++) { // 1
                    int value = nums[i] + nums[j] + nums[k]; // 2
                    int count = 0;
                    for (int l = 1; l <= value; l++) { // 3
                        if (value % l == 0) count++;
                    }
                    if (count == 2) answer++; // 4
                }
            }
        }

        return answer;
    }
}

과정

  1. 주어진 숫자 중 3개를 중복되지않게 더해야해서 3중 for문
  2. value에 각 숫자를 더한 값을 넣는다
  3. 1부터 value까지의 숫자중 value와 나누어 떨어지는 숫자에서 count 증가
  4. 만약 count가 2라면(약수가 1과 자기 자신뿐) 소수이니 answer을 증가

다른 사람 풀이

import java.util.Arrays;

class Solution {



    public int solution(int[] nums) {
        int ans = 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 ++ ){
                    if(isPrime(nums[i] + nums[j] + nums[k])){
                        ans += 1;  
                    } 
                }
            }
        }
        return ans;
    }
    public Boolean isPrime(int num){
        int cnt = 0;
        for(int i = 1; i <= (int)Math.sqrt(num); i ++){
            if(num % i == 0) cnt += 1; 
        }
        return cnt == 1;
    }
}
  • 메서드를 추가해서 가독성이 내 코드보다 좋다고 생각된다
  • 제곱근까지만 반복하여 약수를 찾고, 불필요한 반복도 조금 줄여서 시간 복잡도 측면에서 효율적이다

0개의 댓글