algorithm

백준 11723(JAVA)

yjs3819 2022. 6. 13. 23:03
728x90

문제

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

 

11723번: 집합

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

www.acmicpc.net

풀이

처음에는 21 length를가진 boolean 배열을 이용했는데, 그냥 집합 자료구조를 이용하면 쉽다.

집합은 중복이 되지 않고, 집합의 특정 값에 접근할때, 값을 해쉬하여, 특정 버킷에 바로바로 접근가능하여 빠르다.

집합은 순서 X, 정렬 X, 중복 X

코드

  • 배열 이용
package baekjoon.구현;

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main11723 {
    static int M;
    static boolean[] arr = new boolean[21];
    static BufferedWriter bw;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        M = Integer.parseInt(br.readLine());
        for(int i = 0; i < M; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            String method = st.nextToken();
            if(st.hasMoreTokens()){
                //add remove check toggle
                int value = Integer.parseInt(st.nextToken());
                caculation(method, value);
            }else{
                //all or empty
                caculation(method);
            }
        }

        bw.flush();
        bw.close();
    }
    static void caculation(String method, int ...value) throws IOException {
        if(method.equals("add")){
            int v = value[0];
            if(arr[v]) return;
            arr[v] = true;
        }else if(method.equals("remove")){
            int v = value[0];
            if(!arr[v]) return;
            arr[v] = false;
        }else if(method.equals("check")){
            int v = value[0];
            if(arr[v]){
                bw.write(1 + "\n");
            }else{
                bw.write(0 + "\n");
            }
        }else if(method.equals("toggle")){
            int v = value[0];
            if(arr[v]){
                arr[v] = false;
            }else{
                arr[v] = true;
            }
        }else if(method.equals("all")){
            Arrays.fill(arr, true);
        }else if(method.equals("empty")){
            Arrays.fill(arr, false);
        }
    }
}
  • HashSet이용
package baekjoon.구현;

import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class Main11723_set {
    static int M;
    static Set<Integer> set = new HashSet<>();
    static BufferedWriter bw;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        M = Integer.parseInt(br.readLine());
        for(int i = 0; i < M; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            String method = st.nextToken();
            if(st.hasMoreTokens()){
                //add remove check toggle
                int value = Integer.parseInt(st.nextToken());
                caculation(method, value);
            }else{
                //all or empty
                caculation(method);
            }
        }

        bw.flush();
        bw.close();
    }
    static void caculation(String method, int ...value) throws IOException {
        if(method.equals("add")){
            int v = value[0];
            set.add(v);
        }else if(method.equals("remove")){
            int v = value[0];
            set.remove(v);
        }else if(method.equals("check")){
            int v = value[0];
            if(set.contains(v)){
                bw.write(1 + "\n");
            }else{
                bw.write(0 + "\n");
            }
        }else if(method.equals("toggle")){
            int v = value[0];
            if(set.contains(v)){
                set.remove(v);
            }else{
                set.add(v);
            }
        }else if(method.equals("all")){
            for(int i = 1; i <= 20; i++){
                set.add(i);
            }
        }else if(method.equals("empty")){
            set.clear();
        }
    }
}
728x90

'algorithm' 카테고리의 다른 글

백준 2108(JAVA)  (0) 2022.06.15
백준 3980(JAVA)  (0) 2021.11.01
백준 2661(JAVA)  (0) 2021.10.31
백준 1174(JAVA)  (0) 2021.10.17
백준 16987(JAVA)  (0) 2021.10.12