요소가 동일하지 않은 배열의 공통요소를 찾을때 사용하기 유용한 알고리즘
예제) 두 배열의 공통원소를 구하시오.
public static void solution(int n, int[] arr, int m, int[] arr2) {
// n = arr 배열의 길이
// arr = 대상배열
// m = arr2 배열의 길이
// arr2 = 대상배열
List<Integer> list = new ArrayList<Integer>();
Arrays.sort(arr);
Arrays.sort(arr2);
int p1 = 0, p2 = 0; // 두개의 포인터 생성
while(p1 < n && p2 < m) { // 두 배열의 끝까지 수행
if(arr[p1] == arr2[p2]) { // 공통원소가 발견되면
list.add(arr[p1]); // list에 추가하고
p1++; // 두 포인터 상승
p2++;
}else if(arr[p1] < arr2[p2]) { // 두 데이터가 맞지 않을 경우 배열을 정렬했기때문에 비교하여 작은쪽의 포인터를 상승시킨다.
p1++;
}else p2++;
}
for(int i : list) {
System.out.println(i);
}
}
두개의 포인터를 통하여 문제를 해결하는 이 방식은 배열의 정렬이 필수적으로 되어야 문제해결이 가능하다.
'알고리즘' 카테고리의 다른 글
[알고리즘] Sliding window (0) | 2022.06.01 |
---|---|
[알고리즘] 에라토스테네스 체 (0) | 2022.05.12 |
[알고리즘] 다양한 정렬 알고리즘 (0) | 2022.04.28 |
[알고리즘] 숫자를 뒤집기 (0) | 2022.04.06 |
[프로그래머스] 모의고사 (0) | 2022.03.04 |
댓글