๐™—๐™ž๐™ฉ๐™ฌ๐™ž๐™จ๐™š ๐™ค๐™ฅ๐™š๐™ง๐™–๐™ฉ๐™ž๐™ค๐™ฃ

uuuouuoยท2022๋…„ 7์›” 19์ผ
0
post-thumbnail

๐Ÿ“– ๋น„ํŠธ ์—ฐ์‚ฐ


๐Ÿ’ฌ ๋น„ํŠธ(bit)

  • ์ปดํ“จํ„ฐ์—์„œ ์ž๋ฃŒ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํŠธ ์‚ฌ์šฉ
  • 1bit = 0 ๋˜๋Š” 18bits = 1byte

๐Ÿ’ฌ ๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • 6๊ฐ€์ง€ ๋น„ํŠธ ์—ฐ์‚ฐ์ž
๋น„ํŠธ ์—ฐ์‚ฐ์ž์˜๋ฏธ์„ค๋ช…a = 0b1010, b = 0b0100
&AND๋ชจ๋‘ 1์ด๋ฉด 1a & b = 0b0000
/ORํ•˜๋‚˜๋งŒ 1์ด๋ผ๋„ 1a
^XOR์„œ๋กœ ๋‹ค๋ฅด๋ฉด 1a ^ b = 0b1110
~NOTํ•ด๋‹น๊ฐ’ ๋ฐ˜์ „ 1โ†’0, 0โ†’1~a = 0b0101
<<์™ผ์ชฝ Shift๋น„ํŠธ ์—ด์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™a << n = a * (2^n)
>>์˜ค๋ฅธ์ชฝ Shift๋น„ํŠธ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™a >> n =ย a * (2^-n)
  • ๋น„ํŠธ ์—ฐ์‚ฐ์˜ ์šฐ์„ ์ˆœ์œ„์— ์ฃผ์˜
  • ๋น„ํŠธ ์—ฐ์‚ฐ์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋‚˜ย ๋น„๊ต ์—ฐ์‚ฐ๋ณด๋‹จย ๋‚ฎ์Œ
  • ๋น„๊ต ์—ฐ์‚ฐ(==, > ๋“ฑ) > ๋น„ํŠธ ์—ฐ์‚ฐ > ๋…ผ๋ฆฌ ์—ฐ์‚ฐ( &&, || ๋“ฑ)
  • ๋”ฐ๋ผ์„œ ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ฃผ์˜ ํ•„์š”
if (x & y == 0)// if (x & (y == 0)) ๊ณผ ๊ฐ™์Œ

โ—พ 1 << n

  • 2^n์˜ ๊ฐ’์„ ๊ฐ€์ง
  • ์›์†Œ๊ฐ€ n์ผ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ถ€๋ถ„ ์ง‘ํ•ฉ(Power Set)์˜ ์ˆ˜ ์˜๋ฏธ

โ—พ i & (1 << j)

  • i๋ผ๋Š” ๋ณ€์ˆ˜์˜ j๋ฒˆ์งธ ๋น„ํŠธ ์กฐํšŒ
public class ๋น„ํŠธ์—ฐ์‚ฐ์ž {
    
    public static void main(String[] args) {
    	for (int i = -5; i < 6; i++) {
    		System.out.print(i + " ");
    		printBit(i);
    		System.out.println();
    	}
    }
    
    private static void printBit(int n) {
    	for (int i = 7; i >= 0; --i) {
    		// ๋น„ํŠธ๋งˆ์Šคํฌ: ์›์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ
    		// 1์ผ๋•Œ 1์ถœ๋ ฅ
    		if((n & (1 << i)) == (1 << i)) System.out.print(1);
    		else System.out.print(0);
    	}
    }
}
// ์ถœ๋ ฅ
-5 11111011
-4 11111100
-3 11111101
-2 11111110
0 00000000
1 00000001
2 00000010
3 00000011
4 00000100
5 00000101

์‘์šฉ ๋ฌธ์ œ ํ’€์ด : SWEA ์ด์ง„์ˆ˜ ํ‘œํ˜„

  • ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์†๋„๋Š” ๋น„์Šทํ–ˆ์Œ
import java.io.*;
import java.util.*;
public class swea์ด์ง„์ˆ˜ํ‘œํ˜„ {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		
		for(int t = 1; t <= T; t++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
 			int n = Integer.parseInt(st.nextToken());
 			int m = Integer.parseInt(st.nextToken());

// 			bitwise(n, m, t);
 			bitmasking(n, m, t);
 			
		}

	}
	
	private static void bitwise(int n, int m, int t) {
		for(int i = n-1; i >= 0; --i) {
				if((m & (1 << i)) != (1 << i)) { // m์˜ i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ธ๊ฐ€
					System.out.println("#"+t+" OFF");
					return;
				}
			}
			System.out.println("#"+t+" ON");
	}

	private static void bitmasking(int n, int m, int t) {
		int val = (1 << n) - 1; // 2^n(1<<n)์—์„œ -1ํ•˜๋ฉด ๋ชจ๋‘ 1์ธ n๊ฐœ๋น„ํŠธ
		if((val & m) != val) { // &์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋‚˜์˜จ ๊ฐ’ -> ๋‘˜๋‹ค ๊ฐ™๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋‚˜์˜ด
			System.out.println("#"+t+" OFF");
			return;
		}
		System.out.println("#"+t+" ON");
	}

}

โ—พ ๋น„ํŠธ๋ฅผ ์ด์šฉํ•œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ ์ƒ์„ฑ

  • ์›์†Œ ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” N๊ฐœ์˜ ๋น„ํŠธ๋ฅผ ์ด์šฉ
  • n๋ฒˆ์งธ ๋น„ํŠธ ๊ฐ’์ด 1์ด๋ฉด n๋ฒˆ์งธ ์›์†Œ ํฌํ•จ ์˜๋ฏธ
public class ๋น„ํŠธ์—ฐ์‚ฐ์ž_๋ถ€๋ถ„์ง‘ํ•ฉ {

	public static void main(String[] args) {
		char[] data = {'A', 'B', 'C', 'D'};
		printSubSet(data, 4);
	
	
	}

	private static void printSubSet(char[] data, int n) {
		
		for(int i = 0; i < (1<<n); ++i) { // ๊ณต์ง‘ํ•ฉ ํฌํ•จ์ด๋ผ 0๋ถ€ํ„ฐ, n=4๋‹ˆ๊นŒ 2^4 = 16
			System.out.print("( ");
			for(int j = 0; j < n; ++j) {
				if((i & (1<<j)) == (1<<j)) // 1์ผ๋•Œ ์ถœ๋ ฅ
					System.out.print(data[j] + " ");
			}
			System.out.print(")");
			System.out.println();
		}
	}

}
// ์ถœ๋ ฅ
( )
( A )
( B )
( A B )
( C )
( A C)
( B C )
( A B C )
( D )
( A D )
( B D )
( A B D )
( C D )
( A C D )
( B C D )
( A B C D )

0๊ฐœ์˜ ๋Œ“๊ธ€