min's devlog
[Two pointers] 공통원소 구하기 본문
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