투케이2K

225. (java/자바) 알고리즘 : 소수 만들기 - 다중 for 문 , 경우의 수 , HashSet 중복 제거 본문

Java

225. (java/자바) 알고리즘 : 소수 만들기 - 다중 for 문 , 경우의 수 , HashSet 중복 제거

투케이2K 2021. 8. 3. 08:52

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex6;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;

public class MainActivity6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [소수 만들기]
		 * 1. 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다
		 * 2. 입출력 예시 : 
		 *     - nums = [1,2,3,4] / result = 1
		 *     - nums = [1,2,7,6,4] / result = 4
		 * 3. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12977
		 * 4. 참고 : 소수란 1과 자기 자신만 나누어떨어지는 수 입니다 
		 * */
		
		// 초기 변수 선언 실시
		int arr[] = {1, 2, 3, 4}; // [1 번]
		//int arr[] = {1, 2, 7, 6, 4}; // [2 번]
		
		// 메소드 호출 및 결과 확인
		System.out.println("결과 : " + solution(arr));

	}// 메인 종료
	
	public static int solution (int nums[]) {
		// 결과를 담을 변수 선언 실시
		int result = 0;
		
		// 인풋으로 들어온 데이터 확인 
		System.out.println("nums : " + Arrays.toString(nums));
		System.out.println("");
		
		// 로직 처리 실시
		/**
		 * [세부 설명]
		 * 1. for 문을 사용해서 각각 매핑되는 경우의 수를 구합니다
		 * 2. for 문을 0, 1, 2 각 초기 값을 선언해서 반복문을 수행합니다
		 * 3. hashset 을 사용해서 데이터 중복을 제거하면서 저장 실시 
		 * */
		HashSet hashSet = new HashSet(); // 데이터 중복 제거 배열
		
		for (int i=0; i<nums.length; i++) { // for 반복문 수행
			for(int j=1; j<nums.length; j++) {
				for(int k=2; k<nums.length; k++) {
					if(nums[i] !=nums[j] && nums[i]!=nums[k] && nums[j] != nums[k]) { // 같은 수를 포함 하지 않는 경우 저장
						hashSet.add(nums[i]+nums[j]+nums[k]); // hashSet 에 데이터 삽입
						System.out.println("경우의 수 : " + nums[i]+":"+nums[j]+":"+nums[k]);																		
					}					
				}
			}			
		}
		System.out.println("");
		
		// Iterator 사용해서 hashSet에 저장된 데이터 확인 실시
		int cnt = 0;
		Iterator iterator = hashSet.iterator();
		while(iterator.hasNext()){
			int data = (int) iterator.next();
			for(int n=2; n<=data; n++) {
				if(data%n == 0) { //나누기 수행 >> 몫이 0인경우 (즉, 나누어떨어진경우)
					cnt ++;
				}
			}
			if(cnt == 1) result ++; //소수는 1과 자기자신뿐인 수로 for 반복문을 2부터 수행했으므로 1값으로 나온 수가 소수다
			System.out.println("HashSet Data : " + data);
			System.out.println("cnt : " + cnt);
			System.out.println("");
			cnt = 0; // 카운트 초기화
		}
		System.out.println("");
		
		// 결과 반환 실시
		return result;		
	}

}// 클래스 종료

[결과 출력]


[요약 설명]

/**

* [소수 만들기]

* 1. 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다

* 2. 입출력 예시 :

*     - nums = [1,2,3,4] / result = 1

*     - nums = [1,2,7,6,4] / result = 4

* 3. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12977

* 4. 참고 : 소수란 1과 자기 자신만 나누어떨어지는 수 입니다

* */


 

반응형
Comments