투케이2K

219. (java/자바) 알고리즘 : 포켓몬 - 경우의 수, HashSet 중복 제거 배열 본문

Java

219. (java/자바) 알고리즘 : 포켓몬 - 경우의 수, HashSet 중복 제거 배열

투케이2K 2021. 7. 28. 08:09

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex5;

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

public class MainActivity26 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [포켓몬]
		 * 1. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다
		 * 2. 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다
		 * 3. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다
		 *    - 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
		 *    - 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
		 *    - 첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
		 *    - 두 번째(1번), 세 번째(2번) 폰켓몬을 선택
		 *    - 두 번째(1번), 네 번째(3번) 폰켓몬을 선택
		 *    - 세 번째(2번), 네 번째(3번) 폰켓몬을 선택
		 * 4. N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하세요   
		 * 5. 입출력 예시 : 
		 *    - nums = [3,1,2,3] / result = 2
		 *    - nums = [3,3,3,2,2,4] / result = 3
		 *    - nums = [3,3,3,2,2,2] / result = 2
		 * 6. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/1845
		 * */
		
		// [초기 변수 선언 실시]
		int arr[] = {3,1,2,3};
		//int arr[] = {3,3,3,2,2,4};
		//int arr[] = {3,3,3,2,2,2};
		
		// [메소드 호출 수행 실시]
		System.out.println("결과 : " + solution(arr));
		System.out.println("");

	}// 메인 종료
	
	public static int solution(int[] nums) {
		// [리턴 결과를 반환 할 변수 선언 실시]
		int result = 0;							
		
		// [인풋으로 들어온 전체 배열 n/2 길이 저장]
		int checkSize = nums.length/2;
		
		// [인풋으로 들어온 데이터 확인 실시]
		System.out.println("[arr] : " + Arrays.toString(nums));
		System.out.println("[length / 2] : " + checkSize);
		System.out.println("");
				
		// [반복문을 수행하면서 중복 데이터 데이터 삽입 실시 실시]
		/**
		 * 1. 겹치지 않는 경우의 수를 출력하기 위해 HashSet 을 사용해 중복 제거 데이터를 삽입합니다
		 * 2. hashSet 사이즈가 가질 수 있는 폰켓몬의 수 개수입니다
		 * 3. 질문에서 n/2 마리를 가져도 좋다고 제시했기 때문에 		 
		 *    >> hashSet 중복 제거 사이즈가  >> n/2 크기보다 큰경우 >> n/2 개수 제한을 겁니다 
		 * */
		HashSet hashSet = new HashSet();
		for(int i=0; i<nums.length; i++) {
			hashSet.add(nums[i]);
		}
		System.out.println("[hashSet] : " + hashSet.toString());
		System.out.println("");
		
		// [checkSize 와 hashSet 사이즈 크기를 비교해 리턴 결과 삽입]
		if(checkSize > hashSet.size()) {
			result = hashSet.size();
		}
		else {
			result = checkSize;
		}
		
		// [리턴 결과 반환 실시]
		return result;
		
	}

}// 클래스 종료

[결과 출력]


[요약 설명]

/**

* 1. 겹치지 않는 경우의 수를 출력하기 위해 HashSet 을 사용해 중복 제거 데이터를 삽입합니다

* 2. hashSet 사이즈가 가질 수 있는 폰켓몬의 수 개수입니다

* 3. 질문에서 n/2 마리를 가져도 좋다고 제시했기 때문에

*    >> hashSet 중복 제거 사이즈가 >> n/2 크기보다 큰경우 >> n/2 개수 제한을 겁니다

* */


 

반응형
Comments