<시나리오>
N 마리의 폰켓몬이 있으면 최대 N/2 마리를 데려갈수 있다.
이때 N마리중 중복이 포함되어있을수 있고 이때 가장 많은 종류의 폰켓몬을 데려갈 수있는 경우의 수를 반환하라.
<나의 풀이>
어차피 중복되는 경우의 수는 빠져야하니까 배열의 중복을 없애야겠다고 생각했다.
또한 중복을 없애고 난 후의 배열의 크기가 최대 경우의 수와 같다고 생각했다.
주어진 N을 2로 나눈값의 갯수의 포켓몬만 데려갈수있다는 점에서
중복을 제거한 배열의 값의 사이즈 > N의 크기/2 의 값 이 되면
N의 크기/2가 최대 경우의 수라고 생각했다.
import java.util.HashSet;
import java.util.ArrayList;
class Solution {
public int solution(int[] nums) {
int answer = 0;
ArrayList<Integer> arr = new ArrayList<>();
for (int num : nums) {
if(!arr.contains(num)){
arr.add(num);
}
}
answer = arr.size();
if(answer > nums.length/2){
answer = nums.length/2;
}
return answer;
}
}
<다른 사람의 풀이>
HashSet을 사용하는 방법 - HashSet 중복 제거를 해줌
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
HashSet<Integer> hs = new HashSet<>();
for(int i =0; i<nums.length;i++) {
hs.add(nums[i]); // 중복제거 됨 (HashSet의 기능)
}
if(hs.size()>nums.length/2)
return nums.length/2;
return hs.size();
}
}
'CT' 카테고리의 다른 글
프로세스 (1) | 2023.10.18 |
---|---|
문자열 내 마음대로 정렬하기 (0) | 2022.08.25 |
신규아이디 추천 (0) | 2022.04.19 |
완주하지 못한 선수(해시) (0) | 2022.04.14 |