(Java) 백준 11723번
2023. 8. 13. 22:53ㆍCodingTest
백준 11723번 실버5 정답률 29.261%
문제
비어있는 공집합 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를 공집합으로 바꾼다.
입력
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.
둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
출력
check 연산이 주어질때마다, 결과를 출력한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Integer num = Integer.parseInt(br.readLine());
Set<Integer> intSet = new HashSet<Integer>();
for(int i = 0; i < num; i++) {
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input, " ");
String token = st.nextToken();
Integer number = null;
if(!token.equals("all") && !token.equals("empty"))number = Integer.parseInt(st.nextToken());
switch(token) {
case "add" :
intSet.add(number);
break;
case "remove" :
intSet.remove(number);
break;
case "check" :
bw.write((intSet.contains(number)? 1 : 0) + "\n");
break;
case "toggle" :
if(intSet.contains(number)) intSet.remove(number);
else intSet.add(number);
break;
case "all" :
for(int j = 1; j <= 20; j++) {
intSet.add(j);
}
break;
case "empty" :
intSet = new HashSet<Integer>();
break;
}
}
bw.flush();
br.close();
bw.close();
}
}
동일한 숫자가 있는 경우 해당 연산을 무시하는 특성상 집합 Set에 해당하므로 java Set을 이용하여 구현하였습니다.
(1) add 명령어 : Set에 add하고 Set 특성상 동일한 값이 있는 경우 덮어씁니다.
(2) remove 명령어 : Set에서 remove합니다.
(3) check 명령어 : Set의 contains 명령어를 이용해 존재하는 지 확인합니다.
(4) toggle 명령어 : Set의 contains 명령어를 이용해 존재하면 remove하고 존재하지 않으면 add합니다.
(5) all 명령어 : 1~20까지의 숫자를 모두 add합니다. 이 때 동일한 값이 있는 경우 Set의 특성상 덮어씁니다.
(6) empty 명령어 : 공집합으로 바꾸기 위해 새로운 Set으로 선언합니다.
이상입니다. 지금까지 읽어주셔서 감사합니다.
'CodingTest' 카테고리의 다른 글
(Java) 백준 10816번 (1) | 2023.08.14 |
---|---|
(Java) 백준 22233번 (1) | 2023.08.14 |
(Java) 백준 8979번 (1) | 2023.08.13 |
(Java) 백준 1205번 (1) | 2023.08.13 |
(Java) 백준 1244번 (1) | 2023.08.13 |