백준/동적 계획법 3

[백준/Java] 11723번: 집합

KimNang 2023. 5. 18. 14:01

문제 정보

제목 : 집합

번호 : 11723번

사용 언어 : Java

문제 링크

https://www.acmicpc.net/problem/11723

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

 

시간 제한 메모리 제한
1.5 초 4 MB (하단 참고)

 

문제

비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.

 

입출력 예제


나의 풀이

이 문제는 자바의 HashSet을 사용했고 문제에 적힌것 그대로 작성했습니다. 연산의 이름이 "all"이면 for루프를 이용해 S집합을 {1, 2, ..., 20}으로 바꾸고 "empty"이면 집합을 비웁니다. 이제 연산을 수행하기 위해 if문을 이용해 작성했습니다. "add"이면 n을 집합에 저장하고 "remove"면 n을 삭제합니다. "check"이면 contains()을 이용해 n이 있는지 판단하여 알맞게 "1"이나 "0"을 출력합니다. "toggle"이면 contains()을 이용해 n이 있으면 삭제하고, 없으면 추가합니다.

 

코드

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 {
	static Integer[][] dp = new Integer[41][2];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		Set<Integer> S = new HashSet<>();
		int M = Integer.parseInt(br.readLine());
		
		while(M-- > 0) {
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			String str = st.nextToken();
			if( str.equals("all")) {
				for(int i=1;i<=20;i++) {
					S.add(i);
				}
			} else if( str.equals("empty")) {
				S.clear();
			} else {
				int n = Integer.parseInt(st.nextToken());
				
				if( str.equals("add")) {
					S.add(n);
				} else if(str.equals("remove")) {
					S.remove(n);
				} else if (str.equals("check")){
					if(S.contains(n)) {
						bw.write("1\n");
					} else {
						bw.write("0\n");
					}
				} else if (str.equals("toggle")) {
					if(S.contains(n)) {
						S.remove(n);
					} else {
						S.add(n);
					}
				}
			}
		}
		
		bw.flush();
	    bw.close();
	    br.close();
	}

}