처음에는 쉬운 구현 문제인줄 알고 HashSet을 이용해서 통과했다.
다 풀고 문제 유형을 확인해보니 비트 연산으로 분류 되어 있어
BitSet을 사용해서 다시 풀어보았다.
HashSet을 이용할때보다 시간이나 메모리가 줄어들것으로 생각되었으나거의 차이가 없었다.
if-else와 Stringtokenizer를 똑같이 사용해 그런것 같다.
최종코드(HashSet 사용)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
static int n;
static HashSet<Integer> set;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
sb = new StringBuilder();
set = new HashSet<>();
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String temp = st.nextToken();
if (st.hasMoreTokens()) {
cal(temp, Integer.parseInt(st.nextToken()));
} else {
cal2(temp);
}
}
System.out.println(sb);
}
static void cal(String string, int num) {
if (string.equals("add")) {
set.add(num);
} else if (string.equals("remove")) {
set.remove(num);
} else if (string.equals("check")) {
if (set.contains(num)) {
sb.append(1).append("\n");
} else sb.append(0).append("\n");
} else if (string.equals("toggle")) {
if (set.contains(num)) {
set.remove(num);
} else set.add(num);
}
}
static void cal2(String string) {
if (string.equals("all")) {
set.clear();
for (int i = 1; i < 21; i++) {
set.add(i);
}
} else {
set.clear();
}
}
}
최종코드(BItSet 사용)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.BitSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
BitSet bs = new BitSet(21);
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String s = st.nextToken();
if(st.hasMoreTokens()) {
if(s.equals("add")) {
bs.set(Integer.parseInt(st.nextToken()));
} else if (s.equals("remove")) {
bs.clear(Integer.parseInt(st.nextToken()));
} else if (s.equals("check")) {
if(bs.get(Integer.parseInt(st.nextToken()))) {
sb.append(1).append("\n");
} else {
sb.append(0).append("\n");
}
} else if (s.equals("toggle")) {
bs.flip(Integer.parseInt(st.nextToken()));
}
} else if(s.equals("all")) {
bs.set(1, 21, true);
} else {
bs.clear();
}
}
System.out.println(sb);
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 백준 7662 - 이중 우선순위 큐 (0) | 2022.06.20 |
---|---|
(Java) 백준 18870 - 좌표 압축 (0) | 2022.06.16 |
(Java) 백준 1931 - 회의실 배정 (0) | 2022.06.14 |
(Java) 프로그래머스 카카오 프렌즈 컬러링북 (0) | 2022.06.12 |
(Java) 프로그래머스 수식 최대화 (0) | 2022.06.11 |