CT

폰켓몬

응디 2022. 5. 26. 11:50

<시나리오>

N 마리의 폰켓몬이 있으면 최대 N/2 마리를 데려갈수 있다.

이때 N마리중 중복이 포함되어있을수 있고 이때 가장 많은 종류의 폰켓몬을 데려갈 수있는 경우의 수를 반환하라.

 

<나의 풀이>

어차피 중복되는 경우의 수는 빠져야하니까 배열의 중복을 없애야겠다고 생각했다.

또한 중복을 없애고 난 후의 배열의 크기가 최대 경우의 수와 같다고 생각했다.

주어진 N을 2로 나눈값의 갯수의 포켓몬만 데려갈수있다는 점에서

중복을 제거한 배열의 값의 사이즈 > N의 크기/2 의 값 이 되면

N의 크기/2가 최대 경우의 수라고 생각했다.

import java.util.HashSet;
import java.util.ArrayList;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;

        ArrayList<Integer> arr = new ArrayList<>();

        for (int num : nums) {
            if(!arr.contains(num)){
                arr.add(num);
            }
        }

        answer = arr.size();

        if(answer > nums.length/2){
            answer = nums.length/2;
        }

        return answer;
    }
}

<다른 사람의 풀이>

HashSet을 사용하는 방법 - HashSet 중복 제거를 해줌

import java.util.HashSet;

class Solution {
    public int solution(int[] nums) {

            HashSet<Integer> hs = new HashSet<>();

            for(int i =0; i<nums.length;i++) {
                hs.add(nums[i]);       // 중복제거 됨 (HashSet의 기능)
            }

            if(hs.size()>nums.length/2)
                return nums.length/2;

            return hs.size();
    }
}

 

 

 

'CT' 카테고리의 다른 글

프로세스  (1) 2023.10.18
문자열 내 마음대로 정렬하기  (0) 2022.08.25
신규아이디 추천  (0) 2022.04.19
완주하지 못한 선수(해시)  (0) 2022.04.14