문제 설명

정수로 이루어진 두 개의 배열 arr1, arr2가 주어집니다.

두 배열에 동시에 존재하는 숫자들을 모아서 배열로 출력하는 프로그램을 작성하세요.

출력 배열은 정수를 오름차순으로 정렬하여 반환하세요.

단, 같은 숫자가 arr1이나 arr2에 여러 개 있어도 출력 배열에는 하나만 포함시키세요.


입력 형식

· arr1, arr2 : 정수로 이루어진 배열


출력 형식

· 두 배열에 모두 존재하는 숫자로 이루어진 정수 배열


제약 사항

· 0 < arr1.length <= 100

· 0 < arr2.length <= 100

· 1 <= arr[i], arr[i] <= 100


입출력 예시

· 예시1

  · 입력

      · arr1 = {1, 7, 8, 4}

      · arr2 = {2, 4, 6, 8}

   · 출력 : {4, 8}

  · 설명 : 두 배열 모두에 들어있는 숫자 4와 8로 이루어진, 오름차순으로 정렬된 배열을 출력한다.

 

· 예시2

  · 입력

      · arr1 = {9, 1, 1, 4, 1, 2, 3, 4}

      · arr2 = {5, 6, 10, 12}

  · 출력 : {}

  · 설명 : 두 배열에 모두 들어있는 숫자가 없으므로, 빈 배열을 출력한다.


작성 코드

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution215 {
    public int[] solution(int[] arr1, int[] arr2) {
        Set<Integer> set = new HashSet<>();
        Set<Integer> duplicates = new HashSet<>();

        // Set은 중복을 허용하지 않는다.
        // 중복되지 않은 숫자를 저장하기 위함
        for (int i = 0; i < arr1.length; i++) {
            set.add(arr1[i]);
        }

        // 두 배열에서 중복된 숫자를 저장하기 위함
        // arr2 배열을 반복하면서 set에 arr2 배열의 각 숫자가 포함되어 있는지 확인한다.
        for (int i = 0; i < arr2.length; i++) {
            // 만약 set에 포함되어 있다면 duplicates에 해당 숫자를 추가한다.
            if (set.contains(arr2[i])) {
                duplicates.add(arr2[i]);
            }
        }

        // duplicates에 저장된 중복된 숫자를 result 배열에 복사한다.
        // 이 때, result 배열의 크기는 duplicates의 크기와 같아야 한다.
        int[] result = new int[duplicates.size()];
        int index = 0;
        // num 변수에 duplicates의 각 숫자가 차례대로 저장되며,
        // result[index++] = num; 구문에서 result 배열의 각 요소에 num을 할당하고
        // index 값을 1 증가시킨다.
        for (int num : duplicates) {
            result[index++] = num;
        }
        Arrays.sort(result);
        return result;
    }

    public static void main(String[] args) {
        Solution215 st = new Solution215();
        int[] arr1 = {1, 7, 8, 4};
        int[] arr2 = {2, 4, 6, 8};
        System.out.println(Arrays.toString(st.solution(arr1, arr2)));
        int[] arr3 = {9, 1, 1, 4, 1, 2, 3, 4};
        int[] arr4 = {5, 6, 10, 12};
        System.out.println(Arrays.toString(st.solution(arr3, arr4)));
     }
}

 

정답 코드

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int[] solution(int[] arr1, int[] arr2) {
        Set<Integer> set = new HashSet<>();

        for (int num1: arr1) {
            for (int num2: arr2) {
                if (num1 == num2) {
                    set.add(num1);
                }
            }
        }

        return set.stream()
                .mapToInt(i->i)
                .sorted()
                .toArray();
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        int[] arr1 = {1, 7, 8, 4};
        int[] arr2 = {2, 4, 6, 8};
        System.out.println(Arrays.toString(st.solution(arr1, arr2)));
        int[] arr3 = {9, 1, 1, 4, 1, 2, 3, 4};
        int[] arr4 = {5, 6, 10, 12};
        System.out.println(Arrays.toString(st.solution(arr3, arr4)));
    }
}