비트마스킹을 배워서 사용하여 풀어보았다.
처음에 StringBuilder를 사용하지 않았더니 시간초과가 났다.
비트마스킹 연산
num |= (1<<index) // index자리에 1넣기
num &= ~(1<<index) // index자리에 0넣기
num ^= (1<<index) // index자리 토글하기
num = 0 // 모든 자리 0로 set
num = -1 // 모든 자리 1로 set
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int M, result, num;
static String command;
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
M = Integer.parseInt(br.readLine());
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
command = st.nextToken();
if (!(command.equals("all") || command.equals("empty"))) {
num = Integer.parseInt(st.nextToken());
}
if (command.equals("add")) {
result |= (1 << num);
} else if (command.equals("remove")) {
result &= ~(1 << num);
} else if (command.equals("check")) {
if ((result & (1 << num)) > 0) {
sb.append("1").append("\n");
} else {
sb.append("0").append("\n");
}
} else if (command.equals("toggle")) {
result ^= (1 << num);
} else if (command.equals("all")) {
result = -1;
} else if (command.equals("empty")) {
result = 0;
}
}
System.out.println(sb.toString());
}
}
'개발 > 알고리즘' 카테고리의 다른 글
[백준 3025] 돌 던지기 (1) | 2021.09.08 |
---|---|
[백준 2224] 명제 증명 (python) (0) | 2021.07.12 |
[백준 2638] 치즈 (python) (0) | 2021.06.02 |
[백준 16719] ZOAC (python) (0) | 2021.05.31 |
[백준 9934] 완전 이진 트리 (python) (0) | 2021.05.31 |
최근댓글