JAVA/백준
백준 11723번: 집합
부리와 깃털
2024. 4. 30. 18:58
728x90
반응형
https://www.acmicpc.net/problem/11723
빈 공집합 S에 여러 연산을 수행하는 프로그램을 만드는 문제이다.
- add x: S에 x를 추가한다. x가 이미 있는 경우에는 무시한다.
- remove x: S에 x를 제거한다. x가 없는 경우에는 무시한다.
- check x: S에 x가 있으면 1, 없으면 0을 출력한다.
- toggle x: S에 x가 있으면 제거, 없으면 추가한다.
- all: S를 {1, 2, , ..., 20}으로 바꾼다.
- empty: S를 공집합으로 바꾼다(S를 비운다).
기존에 비슷한 문제처럼 switch - case로 연산을 만들었다.
또한 StringTokenizer로 한 줄로 연산을 받고 따로따로 나눠서 연산을 수행해주었다.
집합은 HashSet으로 만들고, 구현도 그 메소드를 이용해서 만들어냈다.
전에 BufferedWriter로 출력을 모았다가 틀렸던 경험이 있어서,
그때 문제를 해결하기 위해 했던 것과 똑같이 StringBuilder로 출력을 모아 큰 문자열을 만들어주었다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashSet<Integer> hs = new HashSet<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
switch (st.nextToken()) {
case "add":
hs.add(Integer.parseInt(st.nextToken()));
break;
case "remove":
hs.remove(Integer.parseInt(st.nextToken()));
break;
case "check":
if (hs.contains(Integer.parseInt(st.nextToken()))) sb.append("1\n");
else sb.append("0\n");
break;
case "toggle" :
int tog = Integer.parseInt(st.nextToken());
if (hs.contains(tog)) hs.remove(tog);
else hs.add(tog);
break;
case "all":
hs.clear();
for (int j = 1; j <= 20; j++) hs.add(j);
break;
default: hs.clear();
}
}
br.close();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.valueOf(sb));
bw.flush();
bw.close();
}
}
반응형