본문 바로가기

Java/문제풀이연습

[프로그래머스] 소수만들기 (Lv. 1)

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

 - 소수 판별 메소드

 - 소수 추출 메소드

  배열 합 범위 내에서 소수들 list 만들었는데 그래서 코드가 길어진듯..?

 

package Programmers;

import java.util.ArrayList;
import java.util.List;

public class PrimeNum2 {
	public static void main(String[] args) {

		List<Integer> list = new ArrayList<>();
		int[] nums = {1, 2, 3, 4, 5, 6};
		int sum = 0;
		int result = 0;
		
		// 소수추출범위지정 (3개합의 최대값)
		int sumOfNums = 0;
		for (int i = 0; i < 3; i++) {
			sumOfNums += nums[(nums.length-1)-i];
		}
		
		list = primeNums(sumOfNums);	// 소수들
		
		
		// 배열에서 3개의 합 추출 + 소수판별
		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++) {
					sum = nums[i] + nums[j] + nums[k];
					if(list.contains(sum)) {
						System.out.printf("%d, %d, %d 의 합은 %d\n", nums[i], nums[j], nums[k], sum);
						result++;
					}
				}
			}
		}
		
		System.out.println("경우의 수 : " + result);
		
	}
	
	// 소수추출 
	public static List<Integer> primeNums(int sumOfNums) {
		List<Integer> list = new ArrayList<>();
		for (int i = 0; i <= sumOfNums; i++) {
			if(prime(i) != 0 ) {
				list.add(i);
			}
		}
		return list;
	}
	
	// 소수판별
	public static int prime(int sum) {
		int result = 0;
		int prime = 0;
		for (int i = 1; i <= sum; i++) {
			if(sum % i == 0) {
				result++;
			}
		}
		if(result == 2) {
			prime = sum;
		} else {
			prime = 0;
		}
		return prime;
	}
	
	
}

1, 2, 4 의 합은 7
1, 4, 6 의 합은 11
2, 3, 6 의 합은 11
2, 4, 5 의 합은 11
2, 5, 6 의 합은 13
3, 4, 6 의 합은 13
경우의 수 : 6

 

 


 

쓸떼없는 코드 빼고 (List) 다시 정리해봤다.  정답인정!

 - 소수 판별 메소드 : 나머지가 0인 약수가 하나일 때 (1 하나일 때) true 반환

 

class Solution {
    public static int solution(int[] nums) {
        
        int answer = 0;
        int sum = 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++) {
					sum = nums[i] + nums[j] + nums[k];
					if(prime(sum)) {
						answer++;
					}
				}
			}
		}
        
        return answer;
    }
    
	public static boolean prime(int num) {
		
		int count = 0;
		boolean result = false;
		for (int i = 1; i < num; i++) {
			if(num % i == 0) {
				count++;
			}
		}
		if (count == 1) {
			result = true;
		}
		return result;
	}
    
    
}