Java/Baekjoon

[Baekjoon] 11723번 집합 (Java)

다콩잉 2022. 10. 2. 19:40

굉장히 쉬운 문제였는데,,, 시간초과가 나와서 당황한 문제였다..

알고리즘 분류에 비트마스킹이 써있었는데, 그게 뭔지 잘 모르겠어서,,,

HashSet으로 풀었다.

 

예제

26
add 1
add 2
check 1
check 2
check 3
remove 2
check 1
check 2
toggle 3
check 1
check 2
check 3
check 4
all
check 10
check 20
toggle 10
remove 20
check 10
check 20
empty
check 1
toggle 1
check 1
toggle 1
check 1

출력

1
1
0
1
0
1
0
1
0
1
1
0
0
0
1
0

 

 

처음에 check 연산을 할 때마다 출력해주는 코드로 작성했었다.

계속 시간 초과가 나길래 아무리 생각해도 다른 코드가 나올 수가 없다고 생각했다...

혹시나해서 StringBuilder를 사용하여 한 번에 출력했더니 해결되었다.

import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int num = Integer.parseInt(scan.nextLine());
        HashSet<String> set = new HashSet<String>();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < num; i++) {
            String[] arr = scan.nextLine().split(" ");
            switch (arr[0]) {
                case "add":
                    set.add(arr[1]);
                    break;
                case "remove":
                    set.remove(arr[1]);
                    break;
                case "check":
                    if (set.contains(arr[1])) {
                        sb.append(1).append("\n");
                    } else {
                        sb.append(0).append("\n");
                    }
                    break;
                case "toggle":
                    if (set.contains(arr[1])) {
                        set.remove(arr[1]);
                    } else {
                        set.add(arr[1]);
                    }
                    break;
                case "all":
                    set.clear();
                    for (int j = 0; j < 21; j++) {
                        set.add(Integer.toString(j));
                    }
                    break;
                case "empty":
                    set.clear();
                    break;
            }
        }
        System.out.println(sb);
    }
}
728x90