

처음에 HasSet를 이용하여 add, reomve 등의 연산을 하였는데
역시나 시간 초과가 났다.
해당 방식은 비트마스크를 이용하여 푸는 문제이다. 비트마스크에 대한 설명은 아래 페이지 참고
package baekjoon.구현;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class 집합_11723 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
int S = 0;
for (int i = 0; i < testCase; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String op = st.nextToken();
if (op.equals("all")) {
S = (1 << 21) - 1;
continue;
}
if (op.equals("empty")) {
S = 0;
continue;
}
int k = Integer.parseInt(st.nextToken());
switch (op) {
case "add":
S |= (1 << k);
break;
case "remove":
S &= ~(1 << k);
break;
case "check":
System.out.println((S & (1 << k)) !=0 ? "1" : "0");
break;
case "toggle":
S ^= (1 << k);
break;
}
}
br.close();
}
}
그럼에도 시간 초과가 났는데 바로 그 원인은 출력에 있었다.
이제껏 입출력에 성능에 대해 생각 없이 출력 시 print를 사용해왔는데 BufferedWriter이 성능이 더 좋다고 한다.
BufferedWriter가 print보다 성능이 좋은 이유는 아래 사진과 같다.
