백준 11723번 집합 (Java, Kotlin)

: ) YOUNG·2022년 7월 15일
1

알고리즘

목록 보기
163/417

백준 11723번
https://www.acmicpc.net/problem/11723

문제



비어있는 공집합 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를 공집합으로 바꾼다.

생각하기


  • 비트마스킹 문제이다.
  • 하지만 나는 HashSet을 사용해서 문제를 해결했다.
  • Set 구조에서 중복되는 숫자가 없음으로써 최적이라고 생각했다.

동작

Set 자료구조를 통해서 명령어에 대해서 구현만 간단히 하면 된다.



코드



Java


import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		HashSet<Integer> set = new HashSet();
		
		int M = Integer.parseInt(br.readLine());
		while(M-->0) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String str = st.nextToken();
			int x = 0;
			if( !str.equals("all") && !str.equals("empty") ) x = Integer.parseInt(st.nextToken());
			
			if(str.equals("add")) set.add(x);
			else if(str.equals("remove")) set.remove(x);
			else if(str.equals("check")) {
				if(set.contains(x)) sb.append(1).append('\n');
				else sb.append(0).append('\n');
			}
			else if(str.equals("toggle")) {
				if(set.contains(x)) set.remove(x);
				else set.add(x);
			}
			else if(str.equals("all")) {
				for(int i=1; i<=20; i++) set.add(i);
			}
			else if(str.equals("empty")) set.clear();
			
		}
		
		bw.write(sb.toString()); bw.flush(); bw.close();
	} // End of main
} // End of Main class

Kotlin


import java.util.*
import java.io.*
import kotlin.collections.HashSet

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))
    val sb = StringBuilder()
    val set = HashSet<Int>()

    var M = br.readLine().toInt()
    while(M-->0) {
        val st = StringTokenizer(br.readLine())
        val str = st.nextToken()

        var x = 0
        if( !str.equals("all") && !str.equals("empty")) x = st.nextToken().toInt()

        if(str.equals("add")) set.add(x);
        else if(str.equals("remove")) set.remove(x);
        else if(str.equals("check")) {
            if(set.contains(x)) sb.append(1).append('\n');
            else sb.append(0).append('\n');
        }
        else if(str.equals("toggle")) {
            if(set.contains(x)) set.remove(x);
            else set.add(x);
        }
        else if(str.equals("all")) {
            for(i in 1..20) set.add(i);
        }
        else if(str.equals("empty")) set.clear();
    }

    bw.write(sb.toString()); bw.flush(); bw.close()
} // End of main

0개의 댓글