코딩 테스트

(Java) 백준 11723 - 집합

로승리 2022. 6. 15. 03:01

처음에는 쉬운 구현 문제인줄 알고 HashSet을 이용해서 통과했다.

다 풀고 문제 유형을 확인해보니 비트 연산으로 분류 되어 있어

BitSet을 사용해서 다시 풀어보았다.

HashSet을 이용할때보다 시간이나 메모리가 줄어들것으로 생각되었으나거의 차이가 없었다.

if-else와 Stringtokenizer를 똑같이 사용해 그런것 같다.

 

최종코드(HashSet 사용)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {
    static int n;
    static HashSet<Integer> set;
    static StringBuilder sb;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        sb = new StringBuilder();
        set = new HashSet<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String temp = st.nextToken();
            if (st.hasMoreTokens()) {
                cal(temp, Integer.parseInt(st.nextToken()));
            } else {
                cal2(temp);
            }
        }
        System.out.println(sb);
    }

    static void cal(String string, int num) {
        if (string.equals("add")) {
            set.add(num);
        } else if (string.equals("remove")) {
            set.remove(num);
        } else if (string.equals("check")) {
            if (set.contains(num)) {
                sb.append(1).append("\n");
            } else sb.append(0).append("\n");
        } else if (string.equals("toggle")) {
            if (set.contains(num)) {
                set.remove(num);
            } else set.add(num);
        }
    }

    static void cal2(String string) {
        if (string.equals("all")) {
            set.clear();
            for (int i = 1; i < 21; i++) {
                set.add(i);
            }
        } else {
            set.clear();
        }
    }
}

 

최종코드(BItSet 사용)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.BitSet;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        BitSet bs = new BitSet(21);

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            if(st.hasMoreTokens()) {
                if(s.equals("add")) {
                    bs.set(Integer.parseInt(st.nextToken()));
                } else if (s.equals("remove")) {
                    bs.clear(Integer.parseInt(st.nextToken()));
                } else if (s.equals("check")) {
                    if(bs.get(Integer.parseInt(st.nextToken()))) {
                        sb.append(1).append("\n");
                    } else {
                        sb.append(0).append("\n");
                    }
                } else if (s.equals("toggle")) {
                    bs.flip(Integer.parseInt(st.nextToken()));
                }
            } else if(s.equals("all")) {
                bs.set(1, 21, true);
            } else {
                bs.clear();
            }
        }
        
        System.out.println(sb);
    }
}