๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] 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;
}
}
}