알고리즘, 코딩테스트/알고리즘 풀이

[프로그래머스/ 해시] 폰켓몬

jiyoon0000 2025. 3. 8. 00:25

Q. 폰켓몬

A1.

import java.util.HashSet;

class Solution {
    public int solution(int[] nums) {
        // 연구실에 있는 전체 폰켓몬의 수
        int n = nums.length;
        
        // HashSet을 사용해 서로 다른 폰켓몬 종류 저장
        HashSet<Integer> mon = new HashSet<>();
        
        // nums에 있는 폰켓몬 번호 중에 겹치지 않는게 mon에 저장됨
        for (int num : nums) {
            mon.add(num);
        }
        
        // 가져갈 수 있는 폰켓몬 수
        int count = n / 2;
        
        // 가져갈 수 있는 최대 종류의 수는 폰켓몬 종류의 개수 또는 가져갈 수 있는 폰켓몬 수 중 작은값
        return Math.min(mon.size(), count);
    }
}

 

A2.

class Solution {
    public int solution(int[] nums) {
    
        // count = 가져갈 수 있는 폰켓몬 수
        int count = nums.length / 2;
        
        // 1부터 200,000까지 폰켓몬 종류를 체크하기 위한 boolean 배열 생성
        // 폰켓몬 종류 번호는 1번부터 200,000까지니까 인덱스 1에 1번 폰켓몬 저장하려면 배열 크기는 200001이 되야함
        boolean[] exist = new boolean[200001];
        
        // 가지고 있는 폰켓몬 종류의 수
        int mon = 0;
        
        // nums 배열의 각 폰켓몬 종류 번호를 확인한 후
        // 만약 해당 번호가 처음 등장했으면 true로 해당 번호 표시하고, 종류 수 증가
        for (int num : nums) {
            if (!exist[num]){
                exist[num] = true;
                mon++;
            }
        }
        
        return Math.min(mon, count);
    }
}