본문 바로가기
공부 정리/백준

[백준] 자바 11723 집합

by 경적필패. 2021. 9. 1.
반응형

문제

비어있는 공집합 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

댓글