중복값을 제거하기 위해서 HashSet을 사용해야 하는 문제였고, 해당값이 있는지 파악하기 위해서 search해야 하는 문제였다.
나느 이 문제에서 값을 찾기 위해서 Arrays안에 있는 내장함수인 binarysearch함수를 사용했다. 주의할점은 binarysearch를 사용할 때에는 sort가 되어있다는 전제로 search를 하기 때문에 반드시 먼저 sorting을 해주어야 한다.
다만 이 문제에 있어서는 굳이 binarysearch를 사용하지 않고, set안에있는 contains함수를 이용해서 풀 수 도 있었다.
좀더 간결한 코드를 밑에 첨부한다
package pps_camp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Day14_N2 {
public static void main(String[] argv) {
int[] nums1 = {1,2,2,1};
int[] nums2 = {2,2};
Arrays.sort(nums1);
Arrays.sort(nums2);
List<Integer> ans = new ArrayList<Integer>();
if(nums1.length > nums2.length) {
for(int i = 0; i < nums2.length; i++) {
int a = Arrays.binarySearch(nums1, nums2[i]);
if(a >= 0)
ans.add(nums2[i]);
}
}else {
for(int i = 0; i < nums1.length; i++) {
int a = Arrays.binarySearch(nums2, nums1[i]);
if(a >= 0)
ans.add(nums1[i]);
}
}
List<Integer> ans2 = new ArrayList<Integer>(new HashSet<>(ans));
for(int i = 0; i < ans2.size(); i++) {
System.out.print(ans2.get(i)+ " ");
}
}
}
class Solution {
public int[] set_intersection(HashSet<Integer> set1, HashSet<Integer> set2) {
int [] output = new int[set1.size()];
int idx = 0;
for (Integer s : set1)
if (set2.contains(s)) output[idx++] = s;
return Arrays.copyOf(output, idx);
}
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set1 = new HashSet<Integer>();
for (Integer n : nums1) set1.add(n);
HashSet<Integer> set2 = new HashSet<Integer>();
for (Integer n : nums2) set2.add(n);
if (set1.size() < set2.size()) return set_intersection(set1, set2);
else return set_intersection(set2, set1);
}
}