(Java) 백준 11723 - 집합

2022. 6. 15. 03:01·코딩 테스트

처음에는 쉬운 구현 문제인줄 알고 HashSet을 이용해서 통과했다.

다 풀고 문제 유형을 확인해보니 비트 연산으로 분류 되어 있어

BitSet을 사용해서 다시 풀어보았다.

HashSet을 이용할때보다 시간이나 메모리가 줄어들것으로 생각되었으나거의 차이가 없었다.

if-else와 Stringtokenizer를 똑같이 사용해 그런것 같다.

 

최종코드(HashSet 사용)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {
    static int n;
    static HashSet<Integer> set;
    static StringBuilder sb;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        sb = new StringBuilder();
        set = new HashSet<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String temp = st.nextToken();
            if (st.hasMoreTokens()) {
                cal(temp, Integer.parseInt(st.nextToken()));
            } else {
                cal2(temp);
            }
        }
        System.out.println(sb);
    }

    static void cal(String string, int num) {
        if (string.equals("add")) {
            set.add(num);
        } else if (string.equals("remove")) {
            set.remove(num);
        } else if (string.equals("check")) {
            if (set.contains(num)) {
                sb.append(1).append("\n");
            } else sb.append(0).append("\n");
        } else if (string.equals("toggle")) {
            if (set.contains(num)) {
                set.remove(num);
            } else set.add(num);
        }
    }

    static void cal2(String string) {
        if (string.equals("all")) {
            set.clear();
            for (int i = 1; i < 21; i++) {
                set.add(i);
            }
        } else {
            set.clear();
        }
    }
}

 

최종코드(BItSet 사용)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.BitSet;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        BitSet bs = new BitSet(21);

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            if(st.hasMoreTokens()) {
                if(s.equals("add")) {
                    bs.set(Integer.parseInt(st.nextToken()));
                } else if (s.equals("remove")) {
                    bs.clear(Integer.parseInt(st.nextToken()));
                } else if (s.equals("check")) {
                    if(bs.get(Integer.parseInt(st.nextToken()))) {
                        sb.append(1).append("\n");
                    } else {
                        sb.append(0).append("\n");
                    }
                } else if (s.equals("toggle")) {
                    bs.flip(Integer.parseInt(st.nextToken()));
                }
            } else if(s.equals("all")) {
                bs.set(1, 21, true);
            } else {
                bs.clear();
            }
        }
        
        System.out.println(sb);
    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 백준 7662 - 이중 우선순위 큐  (0) 2022.06.20
(Java) 백준 18870 - 좌표 압축  (0) 2022.06.16
(Java) 백준 1931 - 회의실 배정  (0) 2022.06.14
(Java) 프로그래머스 카카오 프렌즈 컬러링북  (0) 2022.06.12
(Java) 프로그래머스 수식 최대화  (0) 2022.06.11
'코딩 테스트' 카테고리의 다른 글
  • (Java) 백준 7662 - 이중 우선순위 큐
  • (Java) 백준 18870 - 좌표 압축
  • (Java) 백준 1931 - 회의실 배정
  • (Java) 프로그래머스 카카오 프렌즈 컬러링북
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 백준 11723 - 집합
상단으로

티스토리툴바