728x90
설명
A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.
두 번째 줄에 N개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.
세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.
네 번째 줄에 M개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.
각 집합의 원소는 1,000,000,000이하의 자연수입니다.
출력
두 집합의 공통원소를 오름차순 정렬하여 출력합니다.
예시 입력1
5
1 3 9 5 2
5
3 2 5 7 8
예시 출력1
2 3 5
풀이
배열 입력받아서 오름차순 정렬을 한다.
a 배열에서는 p1 포인터를 사용한다. b 배열에서는 p2 포인터를 사용한다.
a[p1] == b[p2] 이면 answer 배열에 넣고 p1과 p2를 1 증가시킨다.
a[p1] < b[p2] 이면 p1를, 그렇지 않다면 p2를 1 증가시킨다.
코드
package inflearn._3_2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static ArrayList<Integer> solution(int n, int m, int [] a, int [] b) {
ArrayList<Integer> answer = new ArrayList<>();
Arrays.sort(a);
Arrays.sort(b);
int p1 = 0, p2 = 0;
while (p1 < n && p2 < m) {
if (a[p1] == b[p2]) {
answer.add(a[p1++]);
}
else if (a[p1] < b[p2]) p1++;
else p2++;
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int [] a = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
int [] b = new int[m];
for(int i = 0; i < m; i++) {
b[i] = Integer.parseInt(st.nextToken());
}
ArrayList<Integer> answer = solution(n, m, a, b);
for(int i : answer) {
sb.append(i).append(" ");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
'Coding Test Inflearn' 카테고리의 다른 글
[복합적 문제] 연속 부분 수열 (0) | 2024.04.02 |
---|---|
[Sliding Window] 최대 매출 (0) | 2024.04.01 |
[Two pointers] 두 배열 합치기 (0) | 2024.03.29 |
[Greedy Algorithm] 최대 수입 스케쥴(PriorityQueue 응용문제) (0) | 2024.03.27 |
[Greedy Algorithm] 결혼식 (0) | 2024.03.21 |