오르막길

[JAVA] 11723. 집합 본문

백준 풀어보기

[JAVA] 11723. 집합

nanalyee 2024. 4. 4. 22:10

문제

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

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class BOJ_11723 {
	public static void main(String[] args)  throws IOException  {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		int M = Integer.parseInt(br.readLine());
		String command = "";
		int x = 0;
		Set<Integer> set = new HashSet<>();
		// 반복문과 다음과 같이 초기화 하는 법 둘다 성능적으로는 큰차이가 없겠지만
		// 처음보는 초기화 방법이라 시도해봄
		Set<Integer> allSet = new HashSet<>(Arrays.asList
				(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20));
		for (int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			command = st.nextToken();
			switch (command) {
				case "add":
					x = Integer.parseInt(st.nextToken());
					set.add(x);
					break;
				case "remove":
					x = Integer.parseInt(st.nextToken());
					set.remove(x);
					break;
				case "check":
					x = Integer.parseInt(st.nextToken());
					if (set.contains(x)) sb.append("1"+"\n");
					else sb.append("0"+"\n");
					break;
				case "toggle":
					x = Integer.parseInt(st.nextToken());
					if (set.contains(x)) set.remove(x);
					else set.add(x);
					break;
				case "all":
					set = new HashSet<>(allSet);
					break;
				case "empty":
					set.clear();
					break;
			}			
		}
		System.out.println(sb);
	}
}

Today I Leaned

set을 처음 연습하는 문제 같다. 그래서 set 관련 함수들 복습하고 
set은 초기화 하는 방법이 궁금해서 검색해봤는데
Set<Integer> allSet = new HashSet<>(Arrays.asList(1, 2, 3, ... , 20)); 형태로 쓰는걸 알게됐다!

'백준 풀어보기' 카테고리의 다른 글

[JAVA] 23971. ZOAC 4  (1) 2024.04.19
[JAVA] 11726. 2xn 타일링  (0) 2024.04.04
[JAVA] 9095. 1, 2, 3 더하기  (0) 2024.03.31
[JAVA] 1927. 최소 힙  (0) 2024.03.28
[JAVA] 14940. 쉬운 최단거리  (0) 2024.03.28