<프로그래머스> 폰켓몬

문제링크

https://programmers.co.kr/learn/courses/30/lessons/1845

문제 분석

  1. 박사님댁에 N마리가 존재하면, 나는 최대 N/2마리를 가져갈 수 있다.
  2. N마리 중에는 서로 같은 종이 있을 수 있다.
  3. 해당 N/2마리를 가져갈때 난 최대한 다양한 종을 데려갈 예정이다.

문제 예시

  • size = N/2, cnt : 폰켓몬의 종류
  1. 주어진 배열은 ( 3,1,2,3 )인 경우의 결과는 N/2은 2이고, 폰켓몬의 종류는 세가지 종류가 있다. 최대로 데려 갈 수 있는 폰켓몬의 수보다 종류가 많기 때문에 나는 N/2만큼의 폰켓몬을 데리고 갈 수 있다.(size < cnt 인 경우 answer = size)
  2. 주어진 배열은 ( 3,3,3,2,2,4 )인 경우, size = 3, cnt = 3이다. 즉 동일한 경우에는 최대로 데려 갈 수있는 수는 3마리이다.(answer = size or cnt)
  3. 주어진 배열은 ( 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;
    }
}