๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

[๋ฐฑ์ค€] 11723 ์ง‘ํ•ฉ JAVA ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฐฑ์ค€] 11723 ์ง‘ํ•ฉ JAVA

sehaan 2023. 3. 23. 00:21

 

๋ถ„์„


๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋น„ํŠธ๋งˆ์Šคํ‚น์ด๋ž€?

- ์ปดํ“จํ„ฐ๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์“ฐ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

  ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ํ†ตํ•ด ์Šค์œ„์น˜,๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  

 

๋น„ํŠธ์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

- ๋น„ํŠธ๋งˆ์Šคํฌ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1.  a | b

    - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ OR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ex) a=1 , b=1 ์ผ๋•Œ a | b = 1

          a=1 , b=0 ์ผ๋•Œ a | b = 1

          a=0 , b=0 ์ผ๋•Œ a | b = 0

 

2.  a & b

    - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ AND ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ex) a=1 , b=1 ์ผ๋•Œ a & b = 1

          a=1 , b=0 ์ผ๋•Œ a & b = 0

          a=0 , b=0 ์ผ๋•Œ a & b = 0

 

3.  a ^ b

     - a์˜ ๋ชจ๋“  ๋น„ํŠธ์™€ b์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (๋‹ค๋ฅด๋ฉด 1 , ๊ฐ™์œผ๋ฉด 0)

    ex) a=1 , b=1 ์ผ๋•Œ a ^ b = 0

          a=1 , b=0 ์ผ๋•Œ a ^ b = 1

          a=0 , b=0 ์ผ๋•Œ a ^ b = 0

 

4.  ~a

      - a์˜ ๋ชจ๋“  ๋น„ํŠธ์— NOT ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

 

5.  a << b OR a >> b

       - a์˜ ๋น„ํŠธ๋ฅผ ์™ผ์ชฝ(์˜ค๋ฅธ์ชฝ)์œผ๋กœ b๋งŒํผ ์‰ฌํ”„ํŠธํ•œ๋‹ค.

         ex) 1 << 2 : 2์˜ 2์Šน

               1 << 0 : 2์˜ 0์Šน 

 

์œ„์˜ ์—ฐ์‚ฐ์ž๋“ค์„ ์‘์šฉํ•˜์—ฌ ๋” ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1.idx๋ฒˆ์งธ ๋น„ํŠธ ์ผœ๊ธฐ

   S |= (1<<idx)

 

2. idx๋ฒˆ์งธ ๋น„ํŠธ ๋„๊ธฐ 

    S &= ~(1<<idx)

 

3. idx์— ๋Œ€ํ•œ XOR ์—ฐ์‚ฐ

    S ^= (1<<idx)

 

4. ์ตœํ•˜์œ„ ์ผœ์ ธ์žˆ๋Š” idx ์ฐพ๊ธฐ

     idx = (S & -S)

     * -S = (~S+1) ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

      ex ) S = 1010 , ~S = 0101

             -S = 0101 + 1

                  = 0110

              S & -S = 2(๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค)

 

5. n์ธ ๋ชจ๋“  ์ง‘ํ•ฉ์˜ ๋น„ํŠธ ์ผœ๊ธฐ

     (1<<n) - 1

 

6. idx๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๊ธฐ

    if(S & (1 << idx)) 

     

์ด ๊ฐœ๋…๋“ค์„ ์ˆ™์ง€ํ•˜๋ฉด ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค !

 

์ฝ”๋“œ


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

import static java.lang.Math.abs;

public class Main {

    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int bit=0;
        for(int i=0;i<num;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int seq=0;

            switch (st.nextToken()){
                case "add":
                   seq = Integer.parseInt(st.nextToken());
                   bit |= (1<<(seq-1));
                   break;
                case "remove":
                    seq = Integer.parseInt(st.nextToken());
                    bit &= ~(1<<(seq-1));
                    break;
                case "check":
                    seq = Integer.parseInt(st.nextToken());
                    sb.append((bit & (1<<(seq-1))) != 0 ? "1\n" : "0\n");
                    break;
                case "toggle":
                    seq = Integer.parseInt(st.nextToken());
                    bit ^= (1 << (seq-1));
                    break;
                case "all":
                    bit |= (~0);
                    break;
                case "empty":
                    bit &= 0;
                    break;
            }
        }
        System.out.println(sb);
    }


}