[JAVA] 23. 공통원소 구하기

2021. 5. 5. 18:07
728x90

설명

 

A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.

 

입력

 

첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.

두 번째 줄에 N개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.

세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.

네 번째 줄에 M개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.

각 집합의 원소는 1,000,000,000이하의 자연수입니다.

 

예시 입력 1 

5

1 3 9 5 2

5

3 2 5 7 8

 

예시 출력 1

2 3 5

 

 

풀이

import java.util.*;

public class Main  {

    public static void main(String[] args) {

        Scanner in=new Scanner(System.in);
        int size = in.nextInt();
        int[] arr = new int[size];

        for(int i=0; i<size; i++){
               arr[i] = in.nextInt();
        }

        int size2 = in.nextInt();
        int[] arr2 = new int[size2];

        for(int i=0; i<size2; i++){
            arr2[i] = in.nextInt();
        }

        List<Integer> list = new ArrayList<>();

		// 두 배열 정렬
        Arrays.sort(arr);
        Arrays.sort(arr2);

        int p1 =0, p2=0;
        while(p1<size && p2<size2){
        	// 두 배열의 원소 비교하여 포인터 옮기기
            if(arr[p1] == arr2[p2]){
                list.add(arr[p1++]);
                p2++;
            }else if( arr[p1] < arr2[p2]){
                p1++;
            }else{
                p2++;
            }
        }

        for (Integer integer : list) {
            System.out.print(integer + " ");
        }

    }
}

 

728x90

'알고리즘 > JAVA' 카테고리의 다른 글

[JAVA] 23. 공통원소 구하기 - 복습!  (0) 2021.10.22
[JAVA] 24. 멘토링  (0) 2021.10.17
[JAVA] 22. 두 배열 합치기 (two pointers)  (0) 2021.05.05
[JAVA] 21. 봉우리  (0) 2021.05.01
[JAVA] 20. 격자판 최대합  (0) 2021.04.28

BELATED ARTICLES

more