๐Ÿ“– [๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] Q.11723 ์ง‘ํ•ฉ ๋ฌธ์ œ ํ’€์ด - java

๐Ÿ“– ๋ฌธ์ œ

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

๋น„์–ด์žˆ๋Š” ๊ณต์ง‘ํ•ฉ 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๋ฅผ ๊ณต์ง‘ํ•ฉ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

๐Ÿ” ์ ‘๊ทผ๋ฒ•

Q.11723 ์ง‘ํ•ฉ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๊ณต์ง‘ํ•ฉ S๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋ฌธ์ œ์— ๋‚˜์™€์žˆ๋Š”

add, remove, check, toggle, all, empty ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

add ์—ฐ์‚ฐ์€ x๋ฅผ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด 1 ยซย x ์™€ OR ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

remove ์—ฐ์‚ฐ์€ x๋ฅผ ์ง‘ํ•ฉ์—์„œ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด 1 ยซย x ๋ฅผ NOT ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์–ด ํ•ด๋‹น x๋งŒ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

check ์—ฐ์‚ฐ์€ x๊ฐ€ ์ง‘ํ•ฉ์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด 1 ยซย x์™€ s ์ง‘ํ•ฉ๊ฐ„ AND ์—ฐ์‚ฐ ํ›„ ๋‹ค์‹œ x๋งŒํผย ยป ์˜ฎ๊ฒจ์ฃผ๋ฉด ํฌํ•จ์ด ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

toggle ์—ฐ์‚ฐ์€ x๋ฅผ ๋’ค์ง‘๊ธฐ ์œ„ํ•ด 1 ยซย x ํ›„ XOR ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

all ์—ฐ์‚ฐ์€ ๋ชจ๋‘ 1๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด s = (~0)๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

empty๋Š” s์ง‘ํ•ฉ๊ณผ 0๊ฐ„ AND ์—ฐ์‚ฐ์ž๋กœ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

package problem.bitmask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main_11723 {

    static int s = 0;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n; i++) {
            execute(br.readLine());
        }
        System.out.println(sb.toString());
        br.close();
    }

    public static void execute(String command) {
        String temp[] = command.split(" ");
        int num = 0;
        String operation = temp[0];
        if (temp.length == 2) {
            num = Integer.parseInt(temp[1]);
        }

        switch (operation) {
            case "add":
                s |= (1 << num);
                break;

            case "remove":
                s &= ~(1 << num);
                break;

            case "check":
                sb.append( ( (s & (1 << num)) >> num) + "\n" );
                break;

            case "toggle":
                s ^= (1 << num);
                break;

            case "all":
                s |= (~0);
                break;

            case "empty":
                s &= 0;
                break;
        }
    }
}

Written on May 6, 2021