코딩테스트

[프로그래머스 / lv 1] 폰켓몬 (JAVA_해시)

lyndaa 2023. 3. 12. 00:17

문제

  • 폰켄몬의 종류가 담긴 배열 nums가 있고 여기서 가져갈 수 있는 폰켓몬의 최대값은 nums/2이다.
  • 가져갈 수 있는 폰켄몬 종류의 최대 갯수를 구해야한다. (중복으로 가져가면 해당 폰켄몬의 갯수는 무조건 1이다.)

풀이방법

  • 중복값 제거를 위해 HashSet을 사용
  • 중복값 제거를 한 HashSet size를 통해 구할 수 있는 폰켄몬의 최대 종류 갯수와 가져갈 수 있는 폰켓몬의 최대값인 nums/2를 비교하여 가져갈 수 있는 폰켄몬 종류의 최대 갯수를 구한다.
    • 중복을 제거한 Set의 크기가 nums/2보다 크면 nums/2를, 작으면 Set 사이즈를 리턴

코드

package hashmap_pro;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

public class Solution {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        List<Integer> nums = new ArrayList<>();
        int answer;
        while(st.hasMoreTokens()){
            nums.add(Integer.parseInt(st.nextToken()));
        }
        Solution s = new Solution();
//      int[] numArr = nums.stream().mapToInt(Integer::intValue).toArray();
        int[] numArr = new int[nums.size()];
        for(int i = 0; i < nums.size(); i++) {
            numArr[i] = nums.get(i);
        }
        answer = s.solution(numArr);
    }
    public int solution(int[] nums) throws IOException {
        int answer = 0;
        int max = nums.length/2;
        Set<Integer> hashset = new HashSet<>();
        for(int num : nums){
            hashset.add(num);
        }

        if(hashset.size()<max){
            return hashset.size();
        } else{
            return max;
        }
    }
}