코딩테스트/프로그래머스
[Java][프로그래머스-코딩테스트 level1] 폰켓몬
coding captain
2021. 6. 10. 21:12
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();
}
}