문제
비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.
테스트 케이스
입력 1
26
add 1
add 2
check 1
check 2
check 3
remove 2
check 1
check 2
toggle 3
check 1
check 2
check 3
check 4
all
check 10
check 20
toggle 10
remove 20
check 10
check 20
empty
check 1
toggle 1
check 1
toggle 1
check 1
출력 1
1
1
0
1
0
1
0
1
0
1
1
0
0
0
1
0
입력 2
3
add 1
check 1
check 2
출력 2
1
0
접근
1.몇번 명령어를 입력받을지 숫자를 입력받습니다.
2. 명령어 + 숫자 / 명령어를 (1)에서 입력한 숫자만큼 입력받습니다.
3.check + 숫자가 들어올때마다 해당 수가 있는지 없는지 검사하여 있으면 1 없으면 0을 출력해줍니다.
저 같은 경우 arraylist를 이용하니 간단히 문제가 해결되었습니다.
add명령어는 add함수를 사용하면 되고
remove도 마찬가지로 remove함수를 사용해주면 되고
check는 contains 함수를 사용해줍니다.
toggle도 마찬가지로 contains함수를 사용해줍니다.
all은 리스트를 초기화하고 1~20까지 add 해줍니다.
empty는 clear함수를 사용해줍니다.
코드
import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
/*
11723 problem
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayList<Integer> arr = new ArrayList<>();
int num = Integer.parseInt(br.readLine());
for(int i=0; i<num; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String str = st.nextToken();
if(str.equals("add")) {
arr.add(Integer.parseInt(st.nextToken()));
}
if(str.equals("remove")) {
arr.remove(Integer.valueOf(Integer.parseInt(st.nextToken())));
}
if(str.equals("check")) {
int input = Integer.parseInt(st.nextToken());
if(arr.contains(input)) {
bw.write(String.valueOf(1)+"\n");
}
else {
bw.write(String.valueOf(0)+"\n");
}
}
if(str.equals("toggle")) {
int input = Integer.parseInt(st.nextToken());
if(arr.contains(input)) {
arr.remove(Integer.valueOf(input));
}
else {
arr.add(input);
}
}
if(str.equals("all")) {
arr.clear();
for(int j=1;j<=20;j++) {
arr.add(j);
}
}
if(str.equals("empty")) {
arr.clear();
}
}
bw.flush();
br.close();
bw.close();
}
}
주의
x
'공부 정리 > 백준' 카테고리의 다른 글
[백준] 자바 10610 30 (0) | 2021.09.03 |
---|---|
[백준] 자바 11004 K번째 수 (0) | 2021.09.02 |
[백준] 자바 1476 날짜 계산 (0) | 2021.08.31 |
[백준] 자바 1475 방 번호 (0) | 2021.08.30 |
[백준] 자바 1934 최소공배수 (0) | 2021.08.27 |
댓글