문제

Untitled

Untitled

접근 방식 및 풀이

처음에 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보다 성능이 좋은 이유는 아래 사진과 같다.

출처:https://thsd-stjd.tistory.com/17

출처:https://thsd-stjd.tistory.com/17