💡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();
}
}