[알고리즘] 11723. 집합
2024. 2. 3. 20:30ㆍAlgorithm/with Java
0. 문제
1. 문제 이해
- 메모리 제한 448MB. (java8 기준)
- 주어지는
x
의 크기가1 ≤ x ≤ 20
라서int
32비트로 부분집합을 충분히 표현할 수 있다. - 비트 연산으로 풀기.
2. 제출
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ11723 {
static int S = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuffer sb = new StringBuffer();
String input;
int x = 0;
int m = Integer.parseInt(st.nextToken());
for(int i=0; i<m; i++){
st = new StringTokenizer(br.readLine());
input = st.nextToken();
switch(input) {
case "add" :
x = Integer.parseInt(st.nextToken());
add(x);
break;
case "remove" :
x = Integer.parseInt(st.nextToken());
remove(x);
break;
case "check" :
x = Integer.parseInt(st.nextToken());
sb.append(check(x)).append("\n");
break;
case "toggle" :
x = Integer.parseInt(st.nextToken());
toggle(x);
break;
case "all" :
all();
break;
case "empty" :
empty();
break;
}
}
System.out.println(sb);
br.close();
}
private static void add(int x) {
int num = 1<<x;
S = S | num;
}
private static void remove(int x) {
int num = 1<<x;
S = S & ~num;
}
private static int check(int x) {
int num = 1 << x;
if((S & num) != 0){
return 1;
} else{
return 0;
}
}
private static void toggle(int x) {
S ^= (1 << x);
// if(check(x)==1){
// remove(x);
// }else{
// add(x);
// }
}
private static void all() {
S = -1;
}
private static void empty() {
S = 0;
}
}
'Algorithm > with Java' 카테고리의 다른 글
[Java] Heap (0) | 2024.02.18 |
---|---|
[알고리즘] 12891. DNA 비밀번호 (0) | 2024.02.03 |
[알고리즘] 2023. 신기한 소수 (0) | 2024.02.03 |
[Java] Stack, Queue, Priority Queue (0) | 2024.02.03 |
[Java] 부분집합 (0) | 2024.02.03 |