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