<프로그래머스> 폰켓몬
문제링크
https://programmers.co.kr/learn/courses/30/lessons/1845
문제 분석
- 박사님댁에 N마리가 존재하면, 나는 최대 N/2마리를 가져갈 수 있다.
- N마리 중에는 서로 같은 종이 있을 수 있다.
- 해당 N/2마리를 가져갈때 난 최대한 다양한 종을 데려갈 예정이다.
문제 예시
- size = N/2, cnt : 폰켓몬의 종류
- 주어진 배열은 ( 3,1,2,3 )인 경우의 결과는 N/2은 2이고, 폰켓몬의 종류는 세가지 종류가 있다. 최대로 데려 갈 수 있는 폰켓몬의 수보다 종류가 많기 때문에 나는 N/2만큼의 폰켓몬을 데리고 갈 수 있다.(size < cnt 인 경우 answer = size)
- 주어진 배열은 ( 3,3,3,2,2,4 )인 경우, size = 3, cnt = 3이다. 즉 동일한 경우에는 최대로 데려 갈 수있는 수는 3마리이다.(answer = size or cnt)
- 주어진 배열은 ( 3,3,3,2,2,2 )인 경우 size = 3, cnt = 2이다. Cnt < size 작기 때문에 최대로 데려 갈 수 있는 폰켓몬의 수는 2마리이다.(answer = cnt)
구현코드
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int size = (nums.length) / 2;
//중복제거를 위한 arrayList. Set을 사용해도 무방
ArrayList<Integer> kind_list = new ArrayList<>();
for(int data : nums){
if(!kind_list.contains(data)){
kind_list.add(data);
}
}
int cnt = kind_list.size();
if(size < cnt){
answer = size;
}
else{
answer = cnt;
}
return answer;
}
}