본문 바로가기

코딩테스트/프로그래머스

[Java][프로그래머스-코딩테스트 level1] 폰켓몬

o 요구사항

매개변수 : N마리 폰켓몬의 종류 번호가 담긴 배열 nums

return : N/2마리의 폰켓몬을 선택하는 경우의 수 중  가장 큰 값(단, 폰켓몬 종류를 다르게 선택할 때)

 

경우의 수 나누기

폰켓몬을 선택하는 경우는 폰켓몬의 종류가 모두 다를때에도 최대값이 N/2의 경우를 넘을 수 없다

예를 들어 폰켓몬이 10마리 그리고 종류가 모두 달라 10종류일 때도 10/2, 즉 5마리 밖에 선택할 수 없다.

때문에 폰켓몬 종류가 N/2 보다 적은 경우와 이 보다 많은 경우를 나누어 생각한다

 


o 코드진행

Java Set 컬렉션의 경우 순서에 상관없이 중복을 허용하지 않는다. 이를 이용해 폰켓몬 종류개수를 구한뒤

선택할 수 있는 폰켓몬을 개수를 반환하는 코드를 작성한다

 

 

o 완성코드

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(int[] nums) {    	
    	if(getSizeOfSet(nums) < nums.length/2) {
    		return getSizeOfSet(nums);
    	}
    	return nums.length/2;
    }
   
    Integer getSizeOfSet(int[] nums){
    	Set<Integer> set = new HashSet<>();
    	for(int i: nums) {
    		set.add(i);
    	}
    	return set.size();
    }
}