본문 바로가기

백준

[백준] 11723 집합(java)

https://www.acmicpc.net/problem/11723

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

풀이

 해당 문제는 기본적인 set에 대해서 물어보는 문제이다. 문제에서 입력값을 주는대로 구현하는되는 문제라서 크게 어렵지는 않을것이라고 생각된다. 자세한거는 코드를 보면 이해가 갈것이다. 필자는 두가지 방식으로 구현했는데 우선 첫번째 코드는 try catch를 이용해 오류가 날경우 처리를 해 코드의 반복을 줄인것이고 두번째 코드는 값의 할당을 switch문 내부를 타고 들어갔을 경우 할당하는 방식을 이용해 오류를 처리한것이다. 이는 해당 방식들은 각각 장단점이 있는데 첫번째 코드인 경우는 코드의 반복을 줄여 가독성을 높인것이다 그러나 단점은 try catch문을 사용해서 시간이 두번째 코드에 비해 조금 오래걸린다는 점이다. 두번째 코드의 장점은 시간을 줄인것이고 단점은 가독성이 떨어지며 코드의 반복이 발생한다는 것이다. 각자의 취향에 맞게 선택하면 될것 같다.

 

코드1

import java.io.*;
import java.util.HashSet;

class Main {

    static HashSet<Integer> set = new HashSet<>();
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        int T = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= T; tc++) {
            String[] input = br.readLine().split(" ");
            String option = input[0];
            int x;

            try{
                x = Integer.parseInt(input[1]);
            }
            catch (Exception e){
                x = -1;
            }


            switch (option) {
                case "add":
                    add(x);
                    break;

                case "remove":
                    remove(x);
                    break;

                case "check":
                    check(x);
                    break;

                case "toggle":
                    toggle(x);
                    break;

                case "all":
                    all();
                    break;

                case "empty":
                    empty();
                    break;

            }
        }
        bw.flush();
        bw.close();
        br.close();
    }

    static public void add(int x) {
        if (set.contains(x))
            return;
        else
            set.add(x);
    }

    static void remove(int x) {
        if (set.contains(x))
            set.remove(x);
        else
            return;
    }

    static void check(int x) throws IOException {
        if (set.contains(x))
            bw.write(1 + "\n");
        else
            bw.write(0 + "\n");
    }

    static void toggle(int x) {
        if (set.contains(x))
            set.remove(x);
        else
            set.add(x);
    }

    static void all() {
        set.clear();
        for (int i = 1; i <= 20; i++) {
            set.add(i);
        }
    }

    static void empty() {
        set.clear();
    }
}

 

코드2

import java.io.*;
import java.util.HashSet;

class Main {

    static HashSet<Integer> set = new HashSet<>();
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        int T = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= T; tc++) {
            String[] input = br.readLine().split(" ");
            String option = input[0];
            int x;

            switch (option) {
                case "add":
                    x = Integer.parseInt(input[1]);
                    add(x);
                    break;

                case "remove":
                    x = Integer.parseInt(input[1]);
                    remove(x);
                    break;

                case "check":
                    x = Integer.parseInt(input[1]);
                    check(x);
                    break;

                case "toggle":
                    x = Integer.parseInt(input[1]);
                    toggle(x);
                    break;

                case "all":
                    all();
                    break;

                case "empty":
                    empty();
                    break;

            }
        }
        
        bw.flush();
        bw.close();
        br.close();
    }

    static public void add(int x) {
        if (set.contains(x))
            return;
        else
            set.add(x);
    }

    static void remove(int x) {
        if (set.contains(x))
            set.remove(x);
        else
            return;
    }

    static void check(int x) throws IOException {
        if (set.contains(x))
            bw.write(1 + "\n");
        else
            bw.write(0 + "\n");
    }

    static void toggle(int x) {
        if (set.contains(x))
            set.remove(x);
        else
            set.add(x);
    }

    static void all() {
        set.clear();
        for (int i = 1; i <= 20; i++) {
            set.add(i);
        }
    }

    static void empty() {
        set.clear();
    }
}

'백준' 카테고리의 다른 글

[백준] 2580 스도쿠 (JAVA)  (0) 2022.05.04
[백준] 18870 좌표 압축 (JAVA)  (0) 2022.03.17
[백준] 2630 색종이 만들기(JAVA)  (0) 2022.03.11
[백준] 2606 바이러스 (JAVA)  (0) 2022.03.08
[백준] 1927 최소 힙 (JAVA)  (0) 2022.03.06