💡Problem Solving/BOJ

[BOJ 11723] 집합 (Java)

gom20 2021. 10. 24. 18:38

#문제

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

 

11723번: 집합

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

www.acmicpc.net

#풀이

bitmask 문제로 x의 범위가 20까지이기 때문에 21사이즈의 배열을 생성하여

1~20의 값을 1과 0으로 저장할 수 있게끔 하였다. 

연산의 수가 최대 300만건이 될 수 있기 때문에 출력을 유의해야 한다. 

 

 

#소스코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ11723 {

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int M = Integer.parseInt(br.readLine());
        int[] arr = new int[21];
        int idx = 0;
        String command = "";

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = null;
        for(int i = 0; i < M; i++){
            st = new StringTokenizer(br.readLine());
            command = st.nextToken();
            if(st.hasMoreTokens()){
                idx = Integer.parseInt(st.nextToken());
            }

            switch(command){
                case "add" : arr[idx] = 1;
                break;
                case "remove": arr[idx] = 0;
                break;
                case "check": bw.write(arr[idx] + "\n");
                break;
                case "toggle": arr[idx] = arr[idx] == 1 ? 0 : 1;
                break;
                case "all" : Arrays.fill(arr, 1);
                break;
                case "empty" : Arrays.fill(arr, 0);
                break;
            }
        }

        bw.flush();
    }
}