문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
앨리스는 n개의 사탕을 가지고 있는데, i번째 사탕은 candyType[i] 유형이다. 앨리스는 자신의 체중이 늘기 시작했다는 것을 알아차리고 의사를 방문했다.
의사는 앨리스에게 가지고 있는 사탕의 n / 2 개만 먹으라고 조언했다(n은 항상 짝수). 앨리스는 사탕을 매우 좋아해서 의사의 조언을 따르면서도 최대한 다양한 종류의 사탕을 많이 먹고 싶다.
길이가 n인 정수 배열 candyType이 주어졌을 때, 그녀가 n / 2개의 서로 다른 종류의 사탕만 먹을 경우, 그녀가 먹을 수 있는 최대 서로 다른 종류의 사탕의 수를 반환해라.
#1
Input: candyType = [1, 1, 2, 2, 3, 3]
Output: 3
Explanation: 앨리스는 오직 사탕 6 / 2 = 3 개만 먹을 수 있다. 오직 세 가지 종류가 있고, 그녀는 종류별로 각 하나씩 먹을 수 있다.
#2
Input: candyType = [1, 1, 2, 3]
Output: 2
Explanation: 앨리스는 오직 사탕 4 / 2 = 2 개만 먹을 수 있다. 그녀가 먹을 수 있는 종류는 [1, 2], [1, 3], [2, 3]이고, 그녀는 오직 다른 두 종류만 먹을 수 있다.
#3
Input: candyType = [6, 6, 6, 6]
Output: 1
Explanation: 앨리스는 오직 사탕 4 / 2 = 2 개만 먹을 수 있다. 그녀는 사탕 두 개를 먹을 수 있지만, 종류는 한 가지 뿐이다.
class Solution {
public int distributeCandies(int[] candyType) {
Set<Integer> candyTypes = new HashSet<>();
for(int candy: candyType) candyTypes.add(candy);
if(candyTypes.size() >= candyType.length / 2) return candyType.length / 2;
return candyTypes.size();
}
}