문제
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
코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
long arrA [] = new long [n];
long arrB [] = new long [m];
st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++) {
arrA[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<m;i++) {
arrB[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arrA);
Arrays.sort(arrB);
int a = 0;
int b = 0;
ArrayList<Long> result = new ArrayList<>();
while(a < n) {
if(b < m) {
if(arrA[a] < arrB[b]) {
result.add(arrA[a]);
a++;
}
else if(arrA[a] > arrB[b]) {
b++;
}
else {
a++;
b++;
}
}
else {
result.add(arrA[a++]);
}
}
System.out.println(result.size());
for(int i=0;i<result.size();i++) {
System.out.print(result.get(i)+" ");
}
}
}