349. Intersection of Two Arrays

이기현·2020년 8월 8일

코딩테스트 준비

목록 보기
12/20

중복값을 제거하기 위해서 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)+ " ");
		}

			
		
		 
	}
}

hashset을 이용한 간단한 코드

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);
  }
}
profile
실력을 쌓아가는 하루하루

0개의 댓글