코딩테스트/자바 문제풀이

[CLASS 3: 구현] 백준 11723 집합

승요나라 2024. 10. 19. 22:15

11723번: 집합

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

 

# 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int m = Integer.parseInt(br.readLine());
        int[] s = new int[21]; // 21 크기의 배열 S (원소는 모두 0)
        StringTokenizer st;
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            String order = st.nextToken();

            if (order.equals("all")) {
                for (int j = 1; j <= 20; j++) {
                    s[j] = j;
                }
            } else if (order.equals("empty")) {
                for (int j = 1; j <= 20; j++) {
                    s[j] = 0;
                }
            } else {
                int x = Integer.parseInt(st.nextToken());
                switch (order) {
                    case "add":
                        if (s[x] != x) {
                            s[x] = x;
                        }
                        break;
                    case "remove":
                        if (s[x] == x) {
                            s[x] = 0;
                        }
                        break;
                    case "check":
                        if (s[x] == x) {
                            sb.append(1 + "\n");
                        } else {
                            sb.append(0 + "\n");
                        }
                        break;
                    case "toggle":
                        if (s[x] == x) {
                            s[x] = 0;
                        } else {
                            s[x] = x;
                        }
                        break;
                }
            }
        }
        System.out.print(sb);
        br.close();
    }
}
  • x의 범위가 작아 배열을 사용해 집합 S를 구현했다.
  • 편의상 인덱스 0은 사용하지 않고, 1부터 20자리에 각 인덱스에 해당하는 수가 있으면 x가 있고, 없으면 x가 없다고 판단하는 보편적인 방식이다.
  • 명령어대로 연산하도록 그대로 짰는데 채점해보니 생각보다 시간복잡도가 높았다.
  • 하지만 워낙 m의 범위가 넓은 문제였기 때문에 이정도면 선방했다고 생각한다. ( •̀ ω •́ )✧ (Java는 20등이 924ms)

 

 

잘했쥬?