[JAVA] 23. 공통원소 구하기 - 복습!

2021. 10. 22. 16:30
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 n= in.nextInt();
        int[] arr1 = new int[n];
    	for(int i=0; i<n; i++){
          arr1[i] = in.nextInt();
        }

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

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

// 오름차순으로 먼저 정리하고 비교할 것
        Arrays.sort(arr1);
        Arrays.sort(arr2);


        int pi =0, pj=0;
        while(pi<n && pj< m){
        // 오름차순으로 정리했기 때문에 비교했을 때 숫자가 작은 쪽 인덱스를 +1해서 비교
            if(arr1[pi] <= arr2[pj]){    // if문안에 나누지 말고 바로 == // <= 으로 코딩하쟈
                if(arr1[pi] == arr2[pj]){
                    answer.add(arr1[pi]);
                    pi++;
                    pj++;
                }else{
                    pi++;
                }
            }else{
                pj++;
            }
        }

        for(int i : answer){
            System.out.print( i+" ");
        }
  }
}
728x90

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

[JAVA] 26. 연속 부분 수열 ✔  (0) 2021.10.22
[JAVA] 25. 최대 매출(Sliding Window)  (0) 2021.10.22
[JAVA] 24. 멘토링  (0) 2021.10.17
[JAVA] 23. 공통원소 구하기  (0) 2021.05.05
[JAVA] 22. 두 배열 합치기 (two pointers)  (0) 2021.05.05

BELATED ARTICLES

more