Baekjoon #1822

Baekjoon #1822

1개의 풀이 · Java

문제 원문 보기 ↗

SOLUTION INFO

Java · Main.java

Main.java
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) {
        FastReader rd = new FastReader();
        StringBuilder sb = new StringBuilder();

        int nA = rd.nextInt();
        int nB = rd.nextInt();

        HashSet<Integer> set = new HashSet<>();
        // 집합 A에는 속하면서 집합 B에는 속하지 않는 원소 (이하 A-B 로 표현) 의 개수를 구하기 위해
        while (nA-- > 0) {
            set.add(rd.nextInt()); // set에 먼저 집합 A의 원소를 추가
        }
        while (nB-- > 0) {
            set.remove(rd.nextInt()); // 집합 A와 중복되는 집합 B의 원소를 제거
        }

        // A-B 원소의 개수 출력
        sb.append(set.size()).append("\n");
        // A-B 원소가 있다면 증가하는 순서로 출력
        if (!set.isEmpty()) {
            ArrayList<Integer> list = new ArrayList<>(set); // 정렬하기 위해 Set to List 변환
            Collections.sort(list); // 오름차순 정렬
            for (int it : list) {
                sb.append(it).append(" ");
            }
        }
        System.out.print(sb);
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while(st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() { return Integer.parseInt(next()); }
        long nextLong() { return Long.parseLong(next()); }
        double nextDouble() { return Double.parseDouble(next()); }
        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}

SOLUTION DESCRIPTION

풀이 설명

집합 A에서 집합 B와 겹치는 원소만 제거하면 되는 문제 먼저 A-B 차집합을 구하고 정렬해서 출력하는 방식으로 해결 (HashSet + sort) HashSet + sort 대신 TreeSet을 사용해서 해결할 수도 있다