https://www.acmicpc.net/problem/11723
1. 아이디어
집합을 구현하는 문제로 Set 자료구조를 활용한 구현과 비트마스킹을 활용한 구현 두가지 방식을 활용했다.
2. 문제풀이
switch 문으로 연산 종류에 맞게 연산을 수행하도록 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int M = Integer.parseInt(br.readLine());
Set<Integer> set = new HashSet<>();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
String order = st.nextToken();
switch (order) {
case "add":
int X = Integer.parseInt(st.nextToken());
set.add(X);
break;
case "remove":
X = Integer.parseInt(st.nextToken());
set.remove(X);
break;
case "check":
X = Integer.parseInt(st.nextToken());
sb.append(set.contains(X) ? 1 : 0).append("\n");
break;
case "toggle":
X = Integer.parseInt(st.nextToken());
if (set.contains(X)) set.remove(X);
else set.add(X);
break;
case "all":
for (int n = 1; n <= 20; n++) {
set.add(n);
}
break;
case "empty":
set.clear();
break;
}
}
bw.write(sb.toString());
bw.flush();
}
}
import java.io.*;
import java.util.*;
public class Main_Bitmask {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int M = Integer.parseInt(br.readLine());
int set = 0;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
String order = st.nextToken();
switch (order) {
case "add":
int X = Integer.parseInt(st.nextToken());
set |= (1 << X);
break;
case "remove":
X = Integer.parseInt(st.nextToken());
set &= ~(1 << X);
break;
case "check":
X = Integer.parseInt(st.nextToken());
sb.append(((set & (1 << X)) > 0) ? 1 : 0).append("\n");
break;
case "toggle":
X = Integer.parseInt(st.nextToken());
if ((set & (1 << X)) > 0) set &= ~(1 << X);
else set |= (1 << X);
break;
case "all":
for (int n = 1; n <= 20; n++) {
set |= (1 << n);
}
break;
case "empty":
set = 0;
break;
}
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
- Set
- 비트마스킹
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 17252번 - 삼삼한 수 [Java] (0) | 2025.02.02 |
---|---|
[백준] 1987번 - 알파벳 [Java] (0) | 2025.02.02 |
[백준] 2845번 - 파티가 끝나고 난 뒤 [Java] (0) | 2025.02.02 |
[백준] 11441번 - 합 구하기 [Java] (0) | 2025.02.02 |
[백준] 2527번 - 직사각형 [Java] (0) | 2025.02.02 |