문제
https://www.acmicpc.net/problem/11723
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.
- add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
- remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
- check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
- toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
- all: S를 {1, 2, ..., 20} 으로 바꾼다.
- empty: S를 공집합으로 바꾼다.
풀이
구현에 집중된 문제. Set을 사용하여 시간복잡도를 최적화해보았다.
자세한 내용은 코드를 참고할 것
코드
import java.util.*;
import java.io.*;
class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static int M;
static HashSet<Integer> hs = new HashSet<>();
public static void main(String[] args) throws Exception {
M = Integer.parseInt(br.readLine());
while(M-- > 0) {
solve(br.readLine());
}
bw.close();
}
static void solve(String input) throws Exception {
StringTokenizer st = new StringTokenizer(input);
String command = st.nextToken();
int value = 0;
if(st.hasMoreTokens()) value = Integer.parseInt(st.nextToken());
if(command.equals("add")) hs.add(value);
else if(command.equals("remove")) hs.remove(value);
else if(command.equals("check")) {
if(hs.contains(value)) bw.write("1\n");
else bw.write("0\n");
}
else if(command.equals("toggle")) {
if(hs.contains(value)) hs.remove(value);
else hs.add(value);
}
else if(command.equals("all")) {
hs = new HashSet<>();
for(int i = 1; i < 21; i++) hs.add(i);
}
else hs = new HashSet<>();
}
}
'알고리즘 > 백준' 카테고리의 다른 글
1874 - 스택 수열[S2] (0) | 2023.12.11 |
---|---|
14940 - 쉬운 최단거리[S1] (0) | 2023.12.08 |
14502 - 연구소[G4] (1) | 2023.12.08 |
10825 - 국영수[S4] (2) | 2023.12.08 |
1654 - 랜선 자르기[S2] (0) | 2023.12.08 |