문제 : 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
문제 요약 : 주어진 집합의 차집합 출력
| 입력 | 출력 |
| 1 ≤ n(A), n(B) ≤ 500000 1 ≤ A[N], B[N] ≤ 2147483647 |
집합 A에는 속하지만 집합 B에는 속하지 않는 원소 출력 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_1822.java
| 채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
| 30944271 | cbkpar | 1822 | 맞았습니다!! | 176104KB | 1316ms | Java 11 | 1142B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int a,b,i,t;
HashMap<Integer,Boolean> map = new HashMap<>();
StringTokenizer st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for(i=0;i<a;i++) map.put(Integer.parseInt(st.nextToken()),true);
st = new StringTokenizer(br.readLine());
for(i=0;i<b;i++) {
t = Integer.parseInt(st.nextToken());
if(map.containsKey(t)) map.remove(t);
}
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int k:map.keySet()) arr.add(k);
Collections.sort(arr);
sb.append(arr.size()+"\n");
if(arr.size()!=0) for(int k:arr) sb.append(k+" ");
System.out.println(sb);
}
}
HashMap을 통해 A의 원소를 전부 넣어 준 뒤
B의 원소를 하나하나 확인하며 HashMap에 해당 원소가 있다면 해당 맵을 지워준다.
그 뒤 HashMap에 남은 원소를 ArrayList에 넣어 준 뒤 정렬하여 출력한다.
'백준온라인' 카테고리의 다른 글
| [백준온라인] 12791번 Starman (0) | 2021.07.24 |
|---|---|
| [백준온라인] 12778번 CTP공국으로 이민 가자 (0) | 2021.07.23 |
| [백준온라인] 1431번 시리얼 번호 (0) | 2021.07.21 |
| [백준온라인] 10205번 헤라클레스와 히드라 (0) | 2021.07.20 |
| [백준온라인] 3181번 줄임말 만들기 (0) | 2021.07.19 |
