Post

bitmasking

๐Ÿ’ก ๋น„ํŠธ๋งˆ์Šคํฌ๋กœ ๋ถ€๋ถ„์ง‘ํ•ฉ ๋‹ค๋ฃจ๊ธฐ

๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•  ๋•Œ ์žฌ๊ท€๋‚˜ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ๋งŽ์ด ์“ฐ์ง€๋งŒ,
๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” {1, 2, 3, 4, 5} ์ง‘ํ•ฉ์„ ๋Œ€์ƒ์œผ๋กœ
ํ•ฉ์ด 5์ธ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.


โœ… ๊ธฐ๋ณธ ๊ฐœ๋…: ๋น„ํŠธ๋งˆ์Šคํฌ๋ž€?

N๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ์„ ๋•Œ, ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์ด ๊ฐœ์ˆ˜๋Š” 2^N์ž…๋‹ˆ๋‹ค.
0๋ถ€ํ„ฐ 2^N - 1๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด,
๊ฐ ๋น„ํŠธ๊ฐ€ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
// 1 << 3 = 1000 (8),   H[3]์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น
// 1 << 4 = 10000 (16),  H[4]๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น
int i = 24; // 2์ง„์ˆ˜๋กœ 11000
int[] H = {1, 2, 3, 4, 5};
if ((i & (1 << j)) != 0) {
    sum += H[j];  // j == 3 ๋˜๋Š” j == 4์ผ ๋•Œ๋งŒ ์‹คํ–‰๋จ โ†’ H[3], H[4]๊ฐ€ ํฌํ•จ๋จ
}

์œ„ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด
์˜ˆ๋ฅผ ๋“ค์–ด, i = 24 (11000)์ผ ๋•Œ๋•Œ

  • ์ด์ง„์ˆ˜ 11000์€ j = 4, 3 ์œ„์น˜๊ฐ€ 1์ด๋ผ๋Š” ๋œป์ด๊ณ 
  • ์ด๋Š” H[4]์™€ H[3]์ด ๋ถ€๋ถ„์ง‘ํ•ฉ์— ํฌํ•จ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.



๐Ÿงฉ ์‹ค์Šต -> ํ•ฉ์ด 5์ธ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class SubsetSumCount {
    public static void main(String[] args) {
        int[] H = {1, 2, 3, 4, 5};
        int N = H.length;
        int target = 5;
        int count = 0;

        int subset_cnt = 1 << N;  // ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ฐœ์ˆ˜ = 2^N

        for (int i = 0; i < subset_cnt; i++) {
            int sum = 0;

            for (int j = 0; j < N; j++) {
                // i์˜ j๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ด๋ผ๋ฉด โ†’ H[j] ํฌํ•จ
                if ((i & (1 << j)) != 0) {
                    sum += H[j];
                }
            }

            // ํ•ฉ์ด target(5)์ธ ๊ฒฝ์šฐ๋งŒ count ์ฆ๊ฐ€
            if (sum == target) {
                count++;
            }
        }

        System.out.println("ํ•ฉ์ด " + target + "์ธ ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ฐœ์ˆ˜: " + count);
    }
}

๐Ÿ” ์ถœ๋ ฅ ๊ฒฐ๊ณผ

1
ํ•ฉ์ด 5์ธ ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ฐœ์ˆ˜: 3
This post is licensed under CC BY 4.0 by the author.
3D GIF

Trending Tags

๋„์›€์ด ํ•„์š”ํ•˜๋ฉด
๋‚˜๋ฅผ ๋ˆŒ๋Ÿฌ ๊ตฌ๋ฆฌ๐Ÿป
์ฑ—๋ด‡
๋„ˆ๊ตด
bot
์–ด์„œ์™€ ๊ตฌ๋ฆฌ ส• ยทแดฅยทส”
๋ฌด์—‡์ด ํ•„์š”ํ•˜์…” ๊ตฌ๋ฆฌ?

Trending Tags

๋„์›€์ด ํ•„์š”ํ•˜๋ฉด
๋‚˜๋ฅผ ๋ˆŒ๋Ÿฌ ๊ตฌ๋ฆฌ๐Ÿป
์ฑ—๋ด‡
๋„ˆ๊ตด
bot
์–ด์„œ์™€ ๊ตฌ๋ฆฌ ส• ยทแดฅยทส”
๋ฌด์—‡์ด ํ•„์š”ํ•˜์…” ๊ตฌ๋ฆฌ?