min's devlog

[Two pointers] 공통원소 구하기 본문

til/Algorithm

[Two pointers] 공통원소 구하기

값진 2021. 7. 28. 16:38

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

입력 예제

5

1 3 9 5 2

5

3 2 7 5 8

출력 예제

2 3 5

import java.util.*;
class Main {	
	public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){
		ArrayList<Integer> answer = new ArrayList<>();
		Arrays.sort(a); //a 오름차순 정렬
		Arrays.sort(b); //b 오름차순 정렬
		int p1=0, p2=0;
		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){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[] a=new int[n];
		for(int i=0; i<n; i++){
			a[i]=kb.nextInt();
		}
		int m=kb.nextInt();
		int[] b=new int[m];
		for(int i=0; i<m; i++){
			b[i]=kb.nextInt();
		}
		for(int x : T.solution(n, m, a, b)) System.out.print(x+" ");
	}
}

1. a배열, b배열 오름차순 정렬 시키기

a : 1 2 3 5 9

b : 2 3 5 7 8

2. a[p1] == b[p2]면 add, pointer증가

3. a[p1] < b[p2] 비교해 작은 쪽 pointer 증가 (반대도 같음)

'til > Algorithm' 카테고리의 다른 글

연속부분수열  (0) 2021.07.30
[Sliding window] 최대 매출  (0) 2021.07.28
[Two pointers] 두 배열 합치기  (0) 2021.07.27
[Array] 임시반장 정하기  (0) 2021.07.24
[Array] 봉우리  (0) 2021.07.23
Comments