본문으로 바로가기
반응형

 

관련글

 

완전 탐색 관련 포스팅은 여기를 참조

 

 

1. 개요

 

문제의 링크는 여기를 참조

 

문제의 내용은 아래의 더보기를 클릭하여 참조

 

비트마스크 연산을 수행하는 기초적인 연습을 수행하는 문제

 

 

2. 풀이

 

별도의 풀이 없이 비트마스크 연습용 문제이므로 아래의 코드를 확인하자.

비트마스크에 대한 궁금증이 있는 경우 상단의 링크(완전 탐색)를 확인하자.

 

 

3. 코드

 

아래의 코드를 통해 정답을 알아보자.

 

import java.io.*;

public class Main{
    static int ans = 0;
    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 M = Integer.parseInt(br.readLine());
        for(int i=0; i < M; i++){
            String[] line = br.readLine().split(" ");
            String cmd = line[0];

            if(cmd.equals("all") || cmd.equals("empty")){
                if(cmd.equals("all")){
                    ans = (ans | ((1 << 20) - 1));
                } else {
                    ans = 0;
                }
            } else {
                int n = Integer.parseInt(line[1]);
                if(cmd.equals("add")){
                    add(n-1);
                } else if(cmd.equals("remove")){
                    remove(n-1);
                } else if(cmd.equals("toggle")){
                    toggle(n-1);
                } else {
                    boolean tf = check(n-1);
                    int print = tf ? 1 : 0;
                    bw.write(print + "\n");
                }
            }

        }

        bw.flush();
        br.close();
    }

    // 숫자 추가하는 메소드
    private static void add(int n){
        ans = (ans | (1 << n));
    }

    // 숫자 제거하는 메소드
    private static void remove(int n){
        ans = (ans & ~(1 << n));
    }

    // 숫자 토글하는 메소드
    private static void toggle(int n){
        ans = (ans ^ (1 << n));
    }

    // 숫자 포함 여부 검사하는 메소드
    private static boolean check(int n){
        return (ans & (1 << n)) == Math.pow(2, n);
    }
}

 

읽어주셔서 감사합니다. 오류가 있으면 지적해주시면 반영하겠습니다.

반응형