📌 문제 설명
A, B 두 개의 집합이 주어지면, 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.
📝 입력 & 출력
입력
- 첫 번째 줄: 집합 A의 크기 N (1 ≤ N ≤ 30,000)
- 두 번째 줄: N개의 원소 (중복 없음)
- 세 번째 줄: 집합 B의 크기 M (1 ≤ M ≤ 30,000)
- 네 번째 줄: M개의 원소 (중복 없음)
출력
- 공통 원소를 오름차순으로 출력 (한 줄에 공백으로 구분)
🔸 예제 입력 & 출력
예제 입력 1
5
1 3 9 5 2
5
3 2 5 7 8
예제 출력 1
2 3 5
💡 해결 방법
- 두 배열을 정렬한 후, 투 포인터 방식으로 공통 원소를 찾습니다.
- 두 포인터가 가리키는 값이 같으면 결과에 추가하고, 다르면 더 작은 쪽 포인터를 이동합니다.
💻 코드 구현 (Java)
package partTwoPointers;
import java.util.*;
public class Problem2 {
public ArrayList<Integer> solution(int n, int m, int[] arr1, int[] arr2){
ArrayList<Integer> result = new ArrayList<>();
Arrays.sort(arr1);
Arrays.sort(arr2);
int p1 = 0, p2 = 0;
while(p1 < n && p2 < m) {
if(arr1[p1] == arr2[p2]) {
result.add(arr1[p1]);
p1++;
p2++;
}
else if(arr1[p1] < arr2[p2]) p1++;
else p2++;
}
return result;
}
public static void main(String[] args) {
Problem2 T = new Problem2();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr1 = new int[n];
for(int i = 0; i < n; i++) arr1[i] = kb.nextInt();
int m = kb.nextInt();
int[] arr2 = new int[m];
for(int i = 0; i < m; i++) arr2[i] = kb.nextInt();
for(int x : T.solution(n, m, arr1, arr2)) {
System.out.print(x + " ");
}
kb.close();
}
}
📖 코드 설명
1️⃣ 입력 정렬
Arrays.sort(arr1);
Arrays.sort(arr2);
- 오름차순으로 두 배열을 정렬합니다.
2️⃣ 투 포인터 비교
while(p1 < n && p2 < m) {
if(arr1[p1] == arr2[p2]) {
result.add(arr1[p1]);
p1++; p2++;
} else if(arr1[p1] < arr2[p2]) p1++;
else p2++;
}
- 두 값이 같으면 공통 원소이므로 결과에 추가하고 둘 다 포인터 증가
- 값이 다르면 작은 쪽 포인터를 이동시킴
⏳ 시간 복잡도 분석
- 정렬: O(N log N + M log M)
- 투 포인터 비교: O(N + M)
- 전체 시간 복잡도: O(N log N + M log M)
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 3 투 포인터 & 슬라이딩 윈도우 - 4. 연속 부분수열 (0) | 2025.03.29 |
|---|---|
| 섹션 3. 투 포인터 & 슬라이딩 윈도우 - 3. 최대 매출 (0) | 2025.03.27 |
| 섹션 3. 투 포인터 & 슬라이딩 윈도우 - 1. 두 배열 합치기 (0) | 2025.03.27 |
| 섹션 2. Array - 12. 멘토링 (0) | 2025.03.27 |
| 섹션 2. Array - 11. 임시반장 정하기 (0) | 2025.03.27 |