흥미/코딩테스트

#30😊 폰켓몬

RadderNepa 2024. 3. 7. 00:39

[문제]

출처 : https://school.programmers.co.kr
출처 : https://school.programmers.co.kr


[해답]

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        // 1.
        // 반복문을 돌면서 폰켓몬 번호대로 map에 넣는다. ==> map.put(폰켓몬 번호, 폰켓몬 번호);
        // 풀이의 키포인트는 key의 개수이기에 value는 중요하지 않다.
        
        // 2.
        // 반복문이 끝난 후 keySet 메소드를 이용해 key의 개수를 알아낸다.(key의 개수 = 폰켓몬의 종류 개수)
        
        // 3.
        // 가져갈 수 있는 폰켓몬 마릿수 = nums.length / 2
        
        // 3.
        // 경우의 수는 총 3가지
        // 1. 폰켓몬의 종류 개수 > 가져갈 수 있는 폰켓몬 마릿수 ==> 가져갈 수 있는 폰켓몬 마릿수
        // 2. 폰켓몬의 종류 개수 < 가져갈 수 있는 폰켓몬 마릿수 ==> 폰켓몬의 종류 개수
        // 3. 폰켓몬의 종류 개수 = 가져갈 수 있는 폰켓몬 마릿수 ==> 둘 중 아무거나 해도 상관 없음
        
        Map<Integer, Integer> map = new HashMap<>();
        for(int num : nums) {
            map.put(num, num);
        }
        
        int answer = 0;                     // return 값
        int monster = map.keySet().size();  // 폰켓몬의 종류 개수
        int take = nums.length / 2;         // 가져갈 수 있는 폰켓몬 마릿수
        
        // if(monster > take) {
        //     answer = take;
        // } else if(monster <= take) {
        //     answer = monster;
        // }
        // return answer;
        
        // 결국은 최소값을 찾는거라 아래처럼 간단하게 return 해도 됨
        return Math.min(monster, take);
    }
}