문제 내용은 간단한데 설명을 불필요하게 길게 하다 보니 문제가 헷갈려지는데, 결국 내용은 숫자로 이루어진 배열을 받은 뒤 가장 많은 종류의 폰켓몬을 얻는 경우의 폰켓몬의 수를 구해야 하는데, 여기서 최대값은 배열 크기/2를 넘어갈 수 없다
import java.util.HashMap;
import java.util.Map;
class Solution {
public static int solution(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.merge(num, 1, Integer::sum);
}
int max = nums.length / 2;
int answer = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
answer++;
if (answer >= max) {
return answer;
}
}
return answer;
}
}
일단 최대값을 폰켓몬의 수 / 2로 지정해 놓은 뒤, 배열의 내용을 Map에 모두 넣어주면 폰켓몬 종류와 몇마리 들었는지를 확인할 수 있는데, 이후 Map의 내용을 entrySet을 이용해 꺼내주면서, 종류별로 answer에 +1씩 해주다가 만약 answer가 최대값 이상이 되면 바로 answer를 리턴시켜주면 되고, 그렇지 않을 경우에는 끝까지 돌려본 뒤 폰켓몬 종류를 반환해주면 되는데
지금 와서 보니 폰켓몬의 전체 수는 N/2 를 구하는 경우 외에는 필요가 없으니 HashSet을 사용해도 전혀 문제 푸는데 지장이 없다
Leave a Reply