본문 바로가기

CodingTEST

[백준 11723] 집합 (JAVA)

반응형

백준 11723번 문제 - 집합

 

11723번: 집합

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

www.acmicpc.net


문제 분석

 

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

 

해결 키 포인트

 

  • BufferedReader, BufferedWriter 사용
  • 각 명령에 따른 연산을 switch로 구현
  • TreeSet으로 추가 삭제 시 현재 값이 존재하는지 체크 하지 않아도 된다.
    • TreeSet은 수의 중복이 불가능하므로 편리

코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(br.readLine());

        TreeSet<String> lists = new TreeSet<>();
        for (int i = 0; i < N; i++) {
            String [] s = br.readLine().split(" ");

            switch (s[0]) {
                case "add":
                        lists.add(s[1]);
                    break;
                case "remove":
                        lists.remove(s[1]);
                    break;
                case "check":
                    if(lists.contains(s[1]))
                        bw.write(1 + "\n");
                    else
                        bw.write(0 + "\n");
                    break;
                case "toggle":
                    if(lists.contains(s[1]))
                        lists.remove(s[1]);
                    else
                        lists.add(s[1]);
                    break;

                case "all":
                    lists.clear();
                    for (int j = 1; j <= 20; j++) {
                        lists.add(String.valueOf(j));
                    }
                    break;
                case "empty":
                    lists.clear();
                    break;
            }
        }
        bw.flush();
        bw.close();
    }

}
반응형