🔺 문제
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int M = Integer.parseInt(br.readLine());
List<Integer> list = new ArrayList<>();
while(M --> 0) {
st = new StringTokenizer(br.readLine(), " ");
String s = st.nextToken();
if(s.equals("all")) {
list.clear();
for(int i = 1 ; i <= 20 ; i++) {
list.add(i);
}
}
else if(s.equals("empty")) {
list.clear();
}
else {
int x = Integer.parseInt(st.nextToken()); // 🔔
if(s.equals("add")) {
if(!list.contains(x)) list.add(x);
else continue;
}
else if(s.equals("remove")) {
if(list.contains(x)) list.remove(Integer.valueOf(x)); // 🔔🔔
else continue;
}
else if(s.equals("check")) {
if(list.contains(x)) sb.append(1 + "\n");
else sb.append(0 + "\n");
}
else if(s.equals("toggle")) {
if(list.contains(x)) list.remove(Integer.valueOf(x));
else list.add(x);
}
}
}
System.out.println(sb);
}
}
|
cs |
✅ 해결 아이디어
- 집합을 ArrayList로 정의해 사용했다.
- all 하고 empty를 받는 경우는 문자열 하나만 받으니까 바로 위에서 따로 처리!
- 그 외 경우는 숫자도 같이 입력 받으니까 StringTokenizer로 숫자값 저장하고 add, check, remove, toggle 과정 수행
💥 유의사항
• 리스트에서 해당 객체를 삭제하려면 list.remove(Integer.valueOf(x))
해 줘야 한다.
그냥 list.remove(x)
하면 해당 인덱스의 객체를 삭제하는 거라서..
🔺 다른 풀이들
- 비트마스크 문제라고..?!
[백준 11723 : JAVA] 집합 / 비트마스크
개요 이 문제는 비트 마스크의 기본적인 개념을 활용하면 풀이할 수 있는 문제이다. 처음에는 boolean[]을 선언해서 풀었다. boolean [20]을 선언하여 b [0] ▶ true이면 1이 있는 것, false이면 1이 없는 것
dragon-h.tistory.com
- 비트마스크 사용 (switch - case 문)
[백준] 11723번: 집합 - JAVA
🔗 문제 링크 BOJ 11723번: 집합 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc
girawhale.tistory.com
💬 느낀 점
어려워 보여서 피하기만 했던 비트마스크...
이제는 마주칠 때가 되었다...
예제 더 보고 직접 풀어봐야디,,,ㅠ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 비트마스킹을 이용한 집합 구현이 가장 대표적인 방법이라고 한다.
[Java] 비트(bit)와 비트마스크(bit mask)
비트 (bit) 비트(binary digit) : 데이터를 나타내는 최소 단위이다. 모든 데이터는 0과 1의 조합으로 구성되는데, 이 0또는 1이 하나의 비트이다. 1개의 비트는 두 가지 상태를 나타낼 수 있으므로, n비
myeongju00.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1932번: 정수 삼각형 (0) | 2023.06.01 |
---|---|
[백준/JAVA] 9655번: 돌 게임 (0) | 2023.05.31 |
[백준/JAVA] 2292번: 벌집 (0) | 2023.05.31 |
[백준/JAVA] 5073번: 삼각형과 세 변 (0) | 2023.05.31 |
[백준/JAVA] 23971번: ZOAC 4 (0) | 2023.05.31 |