본문 바로가기
알고리즘(Java)/Two pointers & Sliding window

[알고리즘]Two pointers - 공통원소 구하기

by snowballchoi 2021. 7. 27.

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

입력) 첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.
두 번째 줄에 N개의 원소가 주어집니다. 
세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.
네 번째 줄에 M개의 원소가 주어집니다. 
출력) 두 집합의 공통원소를 오름차순 정렬하여 출력합니다.

 

 

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

public class Main {
	
	public static ArrayList<Integer> solution(int n, int m, int[] a, int[] b) {
		ArrayList<Integer> answer = new ArrayList<>();
		int p1 = 0, p2 = 0; // pointers
		
		// 배열 정렬
		Arrays.sort(a);
		Arrays.sort(b);

		// 공통 원소
		while (p1<n && p2<m) {
			if (a[p1]==b[p2]) {
				answer.add(a[p1++]);
				p2++;
			} 
			else if (a[p1]<b[p2]) p1++;
			else p2++;
		}
		return answer;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] a = new int[n];
		for (int i=0; i<n; i++) {
			a[i] = scanner.nextInt();
		}
		int m = scanner.nextInt();
		int[] b = new int[m];
		for (int i=0; i<m; i++) {
			b[i] = scanner.nextInt();
		}
		for (int x : solution(n, m, a, b)) {
			System.out.print(x + " ");
		}
	}

}

// 배열 정렬 : Arrays.sort(배열명);


결과

댓글