본문으로 바로가기
728x90
반응형

▷ 문제

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

* 입력

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

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

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

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

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

* 출력

두 집합의 공통원소를 오름차순 정렬하여 출력합니다.

▷ 입력 예시

5

1 3 9 5 2

5

3 2 5 7 8

2 3 6 7 9

▷ 출력 예시

2 3 5

▷ 풀이

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {	
    public ArrayList<Integer> solution(int n, int m, int[] nArr, int[] mArr){
        ArrayList<Integer> answer = new ArrayList<>();
        int p1=0, p2=0; // 포인터 변수 선언
        Arrays.sort(nArr);
        Arrays.sort(mArr);

        while(p1<n && p2<m){
            if(nArr[p1] == mArr[p2]) {
                answer.add(nArr[p1++]);
                p2++;
            } else if(nArr[p1] < mArr[p2]){
                p1++;
            } else{
                p2++;
            }
        }

        return answer;
    } 

    public static void main(String[] args){
        Main main = new Main();
        Scanner kb = new Scanner(System.in);

        int n = kb.nextInt();
        int[] nArr = new int[n];

        for(int i=0 ; i<n; i++){
          nArr[i] = kb.nextInt();
        }

        int m = kb.nextInt();
        int[] mArr = new int[m];

        for(int i=0 ; i<m ; i++){
            mArr[i] = kb.nextInt();
        }

        for(int x : main.solution(n, m, nArr, mArr)){
            System.out.print(x + " ");
        }
      }
  }

▷ 핵심 포인트

1. 포인터 변수를 사용하여 간단히 공통 원소를 찾아낼 수 있습니다.

반응형