Post

๐Ÿข 3. Binary Search & Bitwise Operations

๐Ÿ’ก ์ถ”๊ฐ€ ์ง€์‹

  • ์ด์ง„ ํƒ์ƒ‰/์ด์ง„ ๊ฒ€์ƒ‰

  • ๋น„ํŠธ ์—ฐ์‚ฐ


๐Ÿซง ํŠธ๋ฆฌ

: ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค

๋ฃจํŠธ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค

ํŠธ๋ฆฌ์—๋Š” ์‚ฌ์ดํด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค

๋…ธ๋“œ๋“ค์€ ํŠน์ • ์ˆœ์„œ๋กœ ๋‚˜์—ด๋  ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋Ÿด ์ˆ˜ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค

๊ฐ ๋…ธ๋“œ๋Š” ์–ด๋–ค ์ž๋ฃŒํ˜•์œผ๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค

๐Ÿซง ์ด์ง„ํŠธ๋ฆฌ

: ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹์„ ๊ฐ–๋Š” ํŠธ๋ฆฌ

๐Ÿซง ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ

: โ€œ๋ชจ๋“  ์™ผ์ชฝ ์ž์‹๋“ค โ‰ค n < ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ์ž์‹๋“คโ€ ์†์„ฑ์€ ๋ชจ๋“  ๋…ธ๋“œ n์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ์ฐธ์ด์–ด์•ผ ํ•จ

๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์™ผ์ชฝ ์ž์‹๋“ค์˜ ๊ฐ’์ด ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋„๋ก ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ์ž์‹๋“ค ๊ฐ’์€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์ปค์•ผํ•จ

6.png

๐Ÿซง ์ „์ด์ง„ํŠธ๋ฆฌ

: ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž์‹์ด ์—†๊ฑฐ๋‚˜ ์ •ํ™•ํžˆ ๋‘ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ

์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•ด์„œ๋Š” ์•ˆ๋จ

7.png

๐Ÿซง ํฌํ™”์ด์ง„ํŠธ๋ฆฌ

: ์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฉด์„œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ

๋ชจ๋“  ๋ง๋‹จ ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋†’์ด์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค

๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ 2^K-1 (K๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด) ๊ฐœ

8.png

๐Ÿซง ์ด์ง„ ํƒ์ƒ‰

์ฒ˜์Œ์— N๊ฐœ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์—์„œ ๋‹จ๊ณ„๊ฐ€ ํ•˜๋‚˜์”ฉ ์ง€๋‚˜๊ฐ์— ๋”ฐ๋ผ ํƒ์ƒ‰ํ•  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋ฐ˜์”ฉ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ

๐Ÿซง (์ •์ˆ˜๊ฐ€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ) ์ด์ง„ ํƒ์ƒ‰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int BSearch(int arr[], int target) {
    int low = 0;
    int high = arr.length - 1;
    int mid;

    while(low <= high) {
        mid = (low + high) / 2;

        if (arr[mid] == target)
            return mid;
        else if (arr[mid] > target)
            high = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}

๐Ÿซง ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•œ ์ด์ง„ ํƒ์ƒ‰

1
2
3
4
5
6
7
8
9
10
11
12
int BSearchRecursive(int arr[], int target, int low, int high) {
    if (low > high)
        return -1;

    int mid = (low + high) / 2;
    if (arr[mid] == target)
        return mid;
    else if (arr[mid] > target)
        return BSearchRecursive(arr, target, low, mid-1);
    else
        return BSearchRecursive(arr, target, mid+1, high);
}

๐Ÿซง ๋น„ํŠธ ์กฐ์ž‘

: 0s ๋Š” ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 0 ์ธ ๊ฐ’

1s ๋Š” ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 1 ์ธ ๊ฐ’

์—ฐ์‚ฐ๋“ค์ด ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค!

ํ•œ ๋น„ํŠธ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์ด ๋‹ค๋ฅธ ๋น„ํŠธ์— ์–ด๋–ค ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค

9.png

๐Ÿซง 2์˜ ๋ณด์ˆ˜์™€ ์Œ์ˆ˜

: ์ปดํ“จํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ˆ˜๋ฅผ ์ €์žฅํ•  ๋•Œ 2์˜ ๋ณด์ˆ˜ ํ˜•ํƒœ๋กœ ์ €์žฅ

์–‘์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋• ๋ฌธ์ œ ์—†์Œ

์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋• ๊ทธ ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์— ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ 1๋กœ ์„ธํŒ…ํ•œ ๋’ค 2์˜ ๋ณด์ˆ˜๋ฅผ ์ทจํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•จ

N๋น„ํŠธ ์ˆซ์ž์— ๋Œ€ํ•œ 2์˜ ๋ณด์ˆ˜๋Š” 2^N ์— ๋Œ€ํ•œ ๋ณด์ˆ˜๊ฐ’๊ณผ ๊ฐ™์Œ (N์€ ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜)

2์˜ ๋ณด์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์–‘์ˆ˜๋กœ ํ‘œํ˜„๋œ 2์ง„์ˆ˜๋ฅผ ๋’ค์ง‘์€ ๋’ค 1์„ ๋”ํ•ด ์ฃผ๋Š” ๊ฒƒ

10.png

๐Ÿซง ์‚ฐ์ˆ  ์šฐ์ธก ์‹œํ”„ํŠธ VS ๋…ผ๋ฆฌ ์šฐ์ธก ์‹œํ”„ํŠธ

  • ์‚ฐ์ˆ  ์šฐ์ธก ์‹œํ”„ํŠธ
    • ๊ธฐ๋ณธ์ ์œผ๋กœ 2๋กœ ๋‚˜๋ˆˆ ๊ฒฐ๊ณผ์™€ ๊ฐ™์Œ
  • ๋…ผ๋ฆฌ ์šฐ์ธก ์‹œํ”„ํŠธ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„ํŠธ๋ฅผ ์˜ฎ๊ธธ ๋•Œ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์›€์ง์ž„
    • ๋น„ํŠธ๋ฅผ ์˜†์œผ๋กœ ์˜ฎ๊ธด ๋‹ค์Œ์— ์ตœ์ƒ์œ„ ๋น„ํŠธ์— 0์„ ๋„ฃ๋Š”๋‹ค (ยป> ์—ฐ์‚ฐ)
    • ๋น„ํŠธ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธฐ๊ธด ํ•˜์ง€๋งŒ ๋ถ€ํ˜ธ๋น„ํŠธ๋Š” ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค

๐Ÿซง ๊ธฐ๋ณธ์ ์ธ ๋น„ํŠธ ์กฐ์ž‘ : ๋น„ํŠธ๊ฐ’ ํ™•์ธ ๋ฐ ์ฑ„์›Œ๋„ฃ๊ธฐ

๐Ÿ’– ๋น„ํŠธ๊ฐ’ ํ™•์ธ

1 ์„ i ๋น„ํŠธ๋งŒํผ ์‹œํ”„ํŠธ์—์„œ 00010000์™€ ๊ฐ™์€ ๊ฐ’ ๋งŒ๋“ค๊ธฐ

AND ์—ฐ์‚ฐ์„ ํ†ตํ•ด num ์˜ i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ ๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•œ ๋’ค, ์ด ๊ฐ’์„ 0๊ณผ ๋น„๊ต

์ด ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด i๋ฒˆ์งธ ๋น„ํŠธ๋Š” 1, 0์ด๋ผ๋ฉด i๋ฒˆ์งธ ๋น„ํŠธ๋Š” 0์ด์–ด์•ผ ํ•จ

1
2
3
boolean getBit(int num, int i) {
	return ((num % (1 << i)) != );
}
๐Ÿงก ๋น„ํŠธ๊ฐ’ ์ฑ„์›Œ๋„ฃ๊ธฐ

1์„ i๋น„ํŠธ๋งŒํผ ์‹œํ”„ํŠธํ•ด์„œ 00010000์™€ ๊ฐ™์€ ๊ฐ’ ๋งŒ๋“ค๊ธฐ

OR ์—ฐ์‚ฐ์„ ํ†ตํ•ด num์˜ i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’ ๋ฐ”๊พธ๊ธฐ

i๋ฒˆ์งธ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋น„ํŠธ๋“ค์€ 0๊ณผ OR ์—ฐ์‚ฐ์„ ํ•˜๋ฏ€๋กœ num์— ์˜ํ–ฅ ์—†์Œ

1
2
3
int setBit(int num, int i) {
    return num | (1 << i);
}
๐Ÿ’› ๋น„ํŠธ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ

NOT ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด 00010000 ์„ 11101111 ์™€ ๊ฐ™์ด ๋งŒ๋“  ๋’ค num๊ณผ AND ์—ฐ์‚ฐ

๋‚˜๋จธ์ง€ ๋น„ํŠธ์˜ ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š์€ ์ฑ„ i ๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’๋งŒ ์‚ญ์ œ๋จ

1
2
3
4
int clearBit(int num, int i) {
	int mask = ~(1 << i);
	return num & mask;
}
: ์ตœ์ƒ์œ„ ๋น„ํŠธ์—์„œ i๋ฒˆ์งธ ๋น„ํŠธ๊นŒ์ง€ ๋ชจ๋‘ ์‚ญ์ œํ•˜๋ ค๋ฉด (1 ยซย i) ๋กœ i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ธํŒ…ํ•œ ๋’ค ์ด ๊ฐ’์—์„œ 1์„ ๋บ€๋‹ค

i๋ฒˆ์งธ ๋น„ํŠธ ๋ฐ‘์€ ๋ชจ๋‘ 1๋กœ ์„ธํŒ…๋˜๊ณ  ๊ทธ ์œ„๋กœ๋Š” ๋ชจ๋‘ 0์œผ๋กœ ์„ธํŒ…

mask ๊ฐ’๊ณผ num์„ AND ์—ฐ์‚ฐํ•œ๋‹ค๋ฉด ํ•˜์œ„ i๊ฐœ์˜ ๋น„ํŠธ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ ๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์Œ

1
2
3
4
int clearBitMSBthroughI(int num, int i) {
	int mask = (1 << i) - 1;
	return num & mask;
}
: i ๋ฒˆ์งธ ๋น„ํŠธ์—์„œ 0๋ฒˆ์งธ ๋น„ํŠธ๊นŒ์ง€ ๋ชจ๋‘ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 1๋กœ ์„ธํŒ…๋œ -1์„ ์™ผ์ชฝ์œผ๋กœ i + 1๋งŒํผ ์‹œํ”„ํŠธ ํ•œ๋‹ค

i๋ฒˆ์งธ ๋น„ํŠธ ์œ„๋กœ๋Š” ๋ชจ๋‘ 1๋กœ ์„ธํŒ…๋˜๊ณ  ํ•˜์œ„ i๊ฐœ ๋น„ํŠธ๋Š” ๋ชจ๋‘ 0์œผ๋กœ ์„ธํŒ…๋จ

1
2
3
4
int clearBitsIthrough0(int num, int i) {
	int mask = (-1 << (i + 1));
	return num & mask;
}
๐Ÿ’š ๋น„ํŠธ๊ฐ’ ๋ฐ”๊พธ๊ธฐ

i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’์„ v๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด, ์šฐ์„  11101111์™€ ๊ฐ™์€ ๊ฐ’์„ ์ด์šฉํ•ด i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’์„ ์‚ญ์ œํ•ด์•ผ ํ•จ

๋ฐ”๊พธ๊ณ ์ž ํ•˜๋Š” ๊ฐ’ v๋ฅผ ์™ผ์ชฝ์œผ๋กœ i๋ฒˆ ์‹œํ”„ํŠธ ํ•œ๋‹ค

i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’์€ v๊ฐ€ ๋  ๊ฒƒ์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ 0์ด ๋  ๊ฒƒ์ด๋‹ค

๋งˆ์ง€๋ง‰์œผ๋กœ OR ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด i๋ฒˆ์งธ ๋น„ํŠธ๊ฐ’์„ v๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค

1
2
3
4
5
int updateBit(int num, int i, boolean bitIs1) {
	int value - bitIs1 ? 1 : 0;
	int mask = ~(1 << i);
	return (num & mask) | (value << i);
}

๐Ÿซง 2์˜ ๋ณด์ˆ˜, ์Œ์ˆ˜

: ์ปดํ“จํ„ฐ๊ฐ€ ์ •์ˆ˜๋ฅผ ์ €์žฅํ•  ๋•Œ๋Š” ๋Œ€๋ถ€๋ถ„ 2์˜ ๋ณด์ˆ˜ ํ˜•ํƒœ๋กœ ์ €์žฅ

11.png

์Œ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์กด์˜ ์ˆ˜์—์„œ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์€ ๋‹ค์Œ(1์˜ ๋ณด์ˆ˜) 1์„ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ์ด๋Š” ๊ธฐ์กด์˜ ์ˆ˜๋ฅผ 2์˜ ๋ณด์ˆ˜ ํ‘œํ˜„์„ ์ด์šฉํ•ด์„œ ์Œ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ

12.png

๐Ÿซง ์‚ฐ์ˆ  ์‹œํ”„ํŠธ, ๋…ผ๋ฆฌ ์‹œํ”„ํŠธ

: ๋น„ํŠธ๋ฅผ 1bit์”ฉ ๋ฐ€๋ฉด์„œ ์ƒ๊ธด ๋นˆ์ž๋ฆฌ์— ์ƒˆ๋กœ์šด bit๋ฅผ ์ฑ„์›Œ์ฃผ๋Š” ์—ฐ์‚ฐ

13.png

  • ์‚ฐ์ˆ  ์‹œํ”„ํŠธ ์—ฐ์‚ฐ
    • ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์ฑ„์›Œ์ค€๋‹ค
    • ๊ธฐ๋ณธ์ ์œผ๋กœ 2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ๊ณฑํ•œ ๊ฒฐ๊ณผ์™€ ๊ฐ™๋‹ค
  • ๋…ผ๋ฆฌ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ
    • ๋ถ€ํ˜ธ๋น„ํŠธ์— 0์„ ์ฑ„์›Œ์ค€๋‹ค
    • ์‚ฐ์ˆ ์ ์œผ๋กœ๋Š” ๊ฑฐ์˜ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ˆซ์ž๊ฐ€ ๋ณ€ํ™”

๐Ÿซง ๊ธฐ๋ณธ ์—ฐ์‚ฐ

  • NOT [~] : 1์ด๋ฉด 0, 0์ด๋ฉด 1
  • OR [|] : ๋‘ ๊ฐ’ ์ค‘ 1์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด 1, ์•„๋‹ˆ๋ฉด 0

    ํ•ฉ์ง‘ํ•ฉ ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

  • XOR [^] : ๋‘ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด 1, ๊ฐ™์œผ๋ฉด 0

    ์‹ค์ œ๋กœ๋Š” XOR์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’ ์ค‘ 1์˜ ๊ฐฏ์ˆ˜๊ฐ€ ํ™€์ˆ˜๊ฐœ์ด๋ฉด 1

  • AND [&] : ๋‘ ๊ฐ’ ๋ชจ๋‘ 1์ด๋ผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0

    ๊ต์ง‘ํ•ฉ ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

  • SHIFT [<<ย >>] : ๋น„ํŠธ ๋‹จ์œ„๋กœ ํ•œ ์นธ์”ฉ ๋ฏธ๋Š” ์—ฐ์‚ฐ

๐Ÿซง ํ•จ์ˆ˜ ๊ตฌํ˜„

  1. Get : ํŠน์ • ์œ„์น˜์˜ ๋น„ํŠธ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  2. Set : ํŠน์ • ์œ„์น˜์˜ ๋น„ํŠธ ๊ฐ’์„ ์„ธํŒ…ํ•œ๋‹ค.
  3. Count : ์„ธํŒ…๋œ ๋น„ํŠธ ๊ฐ’์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  4. Clear : ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
  5. Toggle : ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚จ๋‹ค.
  6. MSB : ์ตœ์ƒ์œ„ ๋น„ํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค.
  7. LSB : ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค.

๐Ÿซง ๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)

: ์—ฌ๋Ÿฌ ํ‘œํ˜„ ์‹œ ๋น„ํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

ex) ์ง‘ํ•ฉ {1,2,3,5}๊ฐ€ ์žˆ์„ ๋•Œ 11101๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ  ์ €์žฅํ•  ๋•Œ๋Š” 10์ง„์ˆ˜๋กœ 29๋ฅผ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค

๋ฐฐ์—ด์„ ์ด์šฉํ•  ํ•„์š”์—†์ด ์ •์ˆ˜ ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

This post is licensed under CC BY 4.0 by the author.