OJ
[BOJ] 1822 차집합 (JAVA)
P3PP4
2022. 12. 30. 10:00
https://www.acmicpc.net/problem/1822
1822번: 차집합
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소
www.acmicpc.net
Hash Set과 Priority Queue를 이용하여 풀었습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int nA = Integer.parseInt(st.nextToken());
int nB = Integer.parseInt(st.nextToken());
HashSet<Integer> set = new HashSet<>();
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < nA; i++) {
set.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < nB; i++) {
set.remove(Integer.parseInt(st.nextToken()));
} // end of input
Iterator<Integer> it = set.iterator();
PriorityQueue<Integer> pq = new PriorityQueue<>();
while(it.hasNext()) {
pq.offer(it.next());
}
sb.append(set.size()).append("\n");
while(!pq.isEmpty()) {
sb.append(pq.poll()).append(" ");
}
System.out.print(sb.toString());
}
}