๐Ÿค”๋น„ํŠธ๋งˆ์Šคํ‚น

phoenixKimยท2021๋…„ 7์›” 26์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•

๋ชฉ๋ก ๋ณด๊ธฐ
8/72
post-thumbnail

๋น„ํŠธ๋งˆ์Šคํ‚น์€ ์–ธ์ œ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€ 241107

๋ชจ๋“  ์›์†Œ๋“ค์˜ ์‚ฌ์šฉ์œ ๋ฌด๋ฅผ ํŒ์ •ํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฑฐ๋‚˜, ์ง‘ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • on / off ๋™์ž‘์— ์˜ํ•ด์„œ ๊ตฌ๋ถ„ ์ง€์„์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๋•Œ ๋– ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค!

์‚ฌ์šฉ๋ฒ•

  • xor ๋Š” ๋‘๋น„ํŠธ๊ฐ€ ๊ฐ™์œผ๋ฉด 0์ด๊ณ , ๋‹ค๋ฅด๋ฉด 1์ด๋‹ค.
  • or๋Š” ํ•˜๋‚˜๋ผ๋„ 1์ด๋ฉด 1์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” 0์ด๋‹ค.
  • and๋Š” ๋ชจ๋‘ 1์ด๋ฉด 1์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” 0์ด๋‹ค.
  • not์€ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „
  • << n ์€ ์™ผ์ชฝ์œผ๋กœ n๋ฒˆ ์‹œํ”„ํŠธ ํ• ๊ฒƒ์ด๋‹ค.
    ->> n ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ n๋ฒˆ ์‹œํ”„ํŠธ ํ•  ๊ฒƒ์ด๋‹ค.

๋น„ํŠธ๋งˆ์Šคํ‚น ๋ฌธ์ œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ž!

์˜ˆ์‹œ : {a,b,c,d}๋ฅผ ์ง‘ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ผ

: {๊ณต์ง‘ํ•ฉ}, {a} , {b} {c} {d} {a,b} {a,c} {a,d} {b, c} {b, d} {c, d} {a,b,c} {a,b,d} {a, c,d} {b, c, d} {a,b,c,d}
=> ์ด 16๊ฐœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ ์š”์†Œ๋“ค์˜ ์žˆ๊ณ  ์—†๊ณ ์— ๋”ฐ๋ผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์—†์Œ์„ 0์œผ๋กœ ํ•˜๊ณ , ์žˆ์Œ์„ 1๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด, ๋น„ํŠธ๋กœ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ๋‹ค.
์‹ญ์ง„์ˆ˜ : ๋ถ€๋ถ„์ง‘ํ•ฉ : ๋น„ํŠธ๋กœ ํ‘œํ˜„
0 : {} -> {0,0,0,0}
1 :{a} -> {0,0,0,1}
2 : {b} -> {0,0,1,0}
3 : {c} -> {0,1,0,0}
4 : {d} -> {1,0,0,0}
5 : {a,b} -> {0,0,1,1}
6 : {a,c} -> {0,1,0,1}
7 : {a,d} -> {1,0,0,1}
8 : {b, c} -> {0,1,1,0}
9 : {b, d} -> {1,0,1,0}
10 : {c, d} -> {1,1,0,0}
11 : {a,b,c} -> {0,1,1,1}
12 : {a,b,d} -> {1,0,1,1}
13 : {a, c,d} -> {1,1,0,1}
14 : {b, c, d} -> {1,1,1,0}
15 : {a,b,c,d}-> {1,1,1,1}
: ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋น„ํŠธ๋งˆ์Šคํ‚น์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์ด ๊ฐœ์ˆ˜๋Š” " 1 << ์š”์†Œ์˜ ๊ฐฏ์ˆ˜ " : ํ˜„์žฌ ์œ„์—์„œ๋Š” 16์ด๋‹ค.
  • 0000 ์—์„œ๋ถ€ํ„ฐ "+ 1" ์”ฉ ์ฆ๊ฐ€๋ฅผ ํ•˜๋ฉด ๋ชจ๋“  ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋น„ํŠธ ์—ฐ์‚ฐ์ž ๊ณต์‹.

0) ์ „์ฒด์˜ ๊ฒฝ์šฐ ํƒ์ƒ‰

: i << (1 << cnt);
์™œ ์ด๊ฑฐ๋ƒ๋ฉด (1 << cnt)
๋งŒ์•ฝ์— cnt๊ฐ€ 4๋ผ๋ฉด (1 << 4) ๋Š” 10000 ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๊ณ 
์‹ญ์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด 16์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
{a,b,c,d}์˜ ์ด ์ง‘ํ•ฉ์˜ ์ˆ˜๋Š” 16์ด๋‹ค.

์™œ ?
: ์›์†Œ๊ฐ€ 3๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” a , b, c, ์ด๋ ‡๊ฒŒ ์žˆ๋‹ค ํ•˜๋ฉด
a, b, c
x x x
0 x x
0 0 x
0 x 0
x 0 x
x x 0
x 0 0
0 0 0
-> ์ด 8๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ด.
์ด๊ฒƒ์€ ์›์†Œ ๊ฐ์ž๋ฆฌ์˜ ๋น„ํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†์Œ.
1 << ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ.

0) i๋ฒˆ์งธ ์›์†Œ๋กœ ์ด๋™์‹œํ‚ค์ž.

1 << i ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.
1์„ 2๋ฒˆ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด 100 ์ด ๋œ๋‹ค.

1) i๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

: i๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€
(๋น„ํŠธ๋กœ ํ‘œํ˜„๋œ ์ง‘ํ•ฉ) & (1 < i) ๊ฒฐ๊ณผ๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ์กด์žฌ
<i๋ฅผ ์ฆ๊ฐ€ ์‹œํ‚ค๋ฉด์„œ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค>
ex) 2๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
: 0101 & (1 << 2) =>(๊ฒฐ๊ณผ) 0101 & 0100 = 0100 ์ด๋ฏ€๋กœ ์กด์žฌํ•œ๋‹ค.

-> ์˜ˆ์‹œ๋Š” ๋งจ ์œ„์—์„œ ๊ณผ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ
๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ๋จ.

2) i๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ถ”๊ฐ€

: (๋น„ํŠธ๋กœ ํ‘œํ˜„๋œ ์ง‘ํ•ฉ) | (1 << i)

์™œ๋ƒํ•˜๋ฉด | ์—ฐ์‚ฐ์ž๋Š” ๋”ํ•˜๋Š” ์˜๋ฏธ์ด๋‹ค.

ex) 1๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ถ”๊ฐ€
0101 | (1 << 1) => (๊ฒฐ๊ณผ) 0101 | 0010 = 0111

3) i๋ฒˆ์งธ ์›์†Œ๋ฅผ ์‚ญ์ œ

: (๋น„ํŠธ๋กœ ํ‘œํ˜„๋œ ์ง‘ํ•ฉ) &~(1<<i)

์™œ๋ƒํ•˜๋ฉด & ์—ฐ์‚ฐ์ž๋Š” 2๊ฐœ์˜ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•ด์•ผ 1๋กœ ๋ฐ˜ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์—
ํ•œ๊ณณ์„ 0์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด๋ฆฌ์ž๋Š” ์˜๋„์ด๋‹ค.

ex) 2๋ฒˆ์งธ ์›์†Œ๋ฅผ ์‚ญ์ œ
0101 & ~(1<<2) => (๊ฒฐ๊ณผ) 0101 & ~(0100) = 0101 & 1011 = 0001

4) 1์ด ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ๋น„ํŠธ์ˆ˜ ์„ธ๊ธฐ

  • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋‘์ˆ˜์˜ ํ•ฉ์ด 7์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ผ ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
int countBits(int n)
{
	int ret = 0;
    while(n)
	{
    	if(n & 1) ret++;
        n = n >> 1;
    }
	return ret;
}

5) ์ „๋ถ€๋‹ค 1 ๋งŒ๋“ค๊ธฐ

5์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด
// { 1,1,1,1,1};
data = ( ( 1 << 5) - 1 )

  • ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ data ๋ฅผ 100000 ๋งŒ๋“ค์–ด ๋†“๊ณ ,
    ๋นผ๊ธฐ 1์„ ํ•˜๋ฉด 1,1,1,1,1 ๋จ.

์ถœ์ฒ˜

: ์œ ํŠœ๋ธŒ ezsw ๋‹˜ ๊ฐ•์˜!
https://www.youtube.com/watch?v=Bujy_-O99xQ&list=PL6YHvWRMtz7DS3hVaqMazHujPcKVfblQa&index=3

๐Ÿ˜…์ •์˜

: ๋ถˆ๋ฆฌ์–ธ ๋ฐฐ์—ด์˜ ์—ญํ• ์„ ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ, ๋น„ํŠธ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด
ํƒ์ƒ‰, ์ˆ˜์ • ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์„ ๋น„ํŠธ๋งˆ์Šคํ‚น์ด๋ผ๊ณ  ํ•จ.

  • ์žˆ๋‹ค ์—†๋‹ค ๋˜๋Š” on / of ๋ฅผ ์„ ํƒํ•ด์•ผ ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ,
    ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ƒ๊ฐํ•˜์ž.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋ฉด ์ข‹์„๊นŒ?

: 2์ง„์ˆ˜๋งŒ ๋น„ํŠธ์—ฐ์‚ฐ์ž ํ‘œํ˜„๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, 10์ง„์ˆ˜๋Š” ์ปดํ„ฐ ์ž…์žฅ์—์„œ
์•Œ์•„์„œ 2์ง„์ˆ˜๋กœ ๋ฐ”๋ผ๋ด„.
-> 10์ง„์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ฐ”๋ผ๋ณด๋Š” ์‹œ์„ ์„ ๊ฐ€์ง€๊ณ  ์ง„ํ–‰ํ•˜์ž.
--> ์ „์ฒด๋ฅผ for ๋ฌธ์œผ๋กœ 1 << cnt ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ๊ฑด๋ฐ
10์ง„์ˆ˜ ์ผ ๋ฟ, ์ปดํ„ฐ๋Š” 2์ง„์ˆ˜๋กœ ๋ฐ”๋ผ๋ณธ๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€์ž.

๋น„ํŠธ ์—ฐ์‚ฐ์ž ์™œ์”€??

  • O(1) ์— ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์ด ๋งŽ์Œ.
  • ๋ฐ˜๋ณต๋ฌธ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋น„ํŠธ๋งˆ์Šคํ‚น ์‚ฌ์šฉ ์กฐ๊ฑด

: ์š”์†Œ์˜ , ์ธ๋ฑ์Šค์˜ ๊ฐฏ์ˆ˜๊ฐ€ 30๊ฐœ ์ดํ•˜์ผ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•จ.

์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?

  • ๋งŒ์•ฝ์— 3๊ฐœ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์žฅํ•˜์ž.

1) ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฒ”์œ„๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
[๊ฐ€][๋‚˜] [๋‹ค]
: ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ : 000 / 001 010 100 101 110 111
ํ•˜๋‚˜์˜ ๊ตฌํš์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, 2๊ฐ€์ง€ , ์ด ๋ช‡๊ฐœ 3๊ฐœ
-> 2์˜ 3์Šน.
2์˜ n์Šน - 1์ž„
-> ์ด ๋ฒ”์œ„๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์•ผ ํ•จ.

1๋‹จ๊ณ„
: for(int i =0; i < (1 << n); ++i)

2) ์ธ๋ฑ์Šค ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ 1๊ณผ & ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•˜๊ธฐ


Problem 1๋ฒˆ : ํฐ๋Œ๋‹˜.

์‚ฌ๊ณผ , ๊ทค, ํฌํ†  ,๋”ธ๊ธฐ ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•ด์„œ ํ‘œํ˜„ํ•˜๋ผ.

#include <iostream>
using namespace std;
#include <string>

int main()
{
	string fruit[4] = { "์‚ฌ๊ณผ","๊ทค","ํฌ๋„","๋”ธ๊ธฐ" };
	cout << "๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”? " << endl;

	// 15 ๋ฒˆ์„ ๋Œ๋ ค์•ผ ํ•จ.
	// 15๋ฒˆ์„ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊นŒ???
	// ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ์Œ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ. 
	// ๋ชจ๋“  ์ˆ˜๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์ˆ™์ง€ ํ•ด์•ผํ•จ.
	
	int n = 0;
	// ์‹œํ”„ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๋น„๊ตํ•  ํšŸ์ˆ˜
	// ์—ฌ๊ธฐ์„œ ์‹œํ”„ํŠธ๋Š” ๊ทธ๋ƒฅ + 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋น„๊ตํ•˜๋ฉด ๋ ๋“ฏ>?
	for (int i = 0; i < (1 << 4) ; ++i)
	{
		// 0 0 0 1
		// 0 0 1 0
		// ๋“ฑ๋“ฑ...
		
		cout << "{ ";
		for (int j = 0; j < 4; j++)
		{
			// ์ด๋ฏธ i ๊ฐ’์„ ๊ณ ์ •๋˜์–ด ์žˆ๋Š”๋ฐ//
			// ์ด๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ ์ธ๋ฑ์Šค์™€ ๋น„๊ต๋ฅผ ํ• ๊ฒƒ์ธ๊ฐ€
			// ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ์ด ์ค‘์š”ํ•จ...

			// 0000 ๊ณผ 4๊ฐœ๋ฅผ ๋น„๊ต?? 
			// ๊ฒฐ๊ณผ : ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋‚˜์˜ด,. 

			// 0001 ๊ณผ 4๊ฐœ๋ฅผ ๋น„๊ต?? 
			// ๊ฒฐ๊ณผ : ์‚ฌ๊ณผ๋งŒ ๋‚˜์˜ด

			// ๊ฐ ์ž๋ฆฌ์˜ ์œ„์น˜์™€ i๋ฅผ ๋น„๊ตํ•ด์•ผํ•จ.
			// ๊ฐ ์ž๋ฆฌ์ˆ˜๋Š” 2์˜ ์ œ๊ณฑ์Šน์ž„์„ ํŒŒ์•…์„ ํ•ด์•ผํ•จ.
            // ๋ฐ‘์—์„œ i๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณต์‹์„ ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•˜์ž.
			if (i & (1 << j))
				cout << fruit[j] << " ";

		} 
		cout << " } ";

	}
	
}

์ตœ๊ทผ : ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ

: ๋ชจ๋“  ์ˆ˜๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•จ.
-> ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์ด์šฉํ•ด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•จ.

๋ฌธ์ œ!
์˜ˆ์‹œ : ์‚ฌ๊ณผ, ๊ทค, ํฌ๋„, ๋”ธ๊ธฐ ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋ผ.
1๋ฒˆ : ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ
2๋ฒˆ :์‚ฌ๊ณผ
3๋ฒˆ :๊ทค
4๋ฒˆ :์‚ฌ๊ณผ ๊ทค
5๋ฒˆ :ํฌ๋„
6๋ฒˆ :ํฌ๋„ ์‚ฌ๊ณผ
7๋ฒˆ :ํฌ๋„ ๊ทค
8๋ฒˆ :ํฌ๋„ ์‚ฌ๊ณผ ๊ทค
...
15๋ฒˆ :์‚ฌ๊ณผ ๊ทค ํฌ๋„ ๋”ธ๊ธฐ
: ์ด 15๊ฐœ๋กœ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ์Œ!

  1. ์ „์ฒด๋ฅผ ๋Œ๋ ค์•ผ ํ•˜๋Š”๋ฐ, ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ์ผ๋•Œ๋Š” ์ด 15๋ฒˆ์ž„.
    : ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž๋กœ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ.
  2. ์ „์ฒด๋ฅผ ์ˆœํ™˜ํ•˜๋Š” i์™€ 4๊ฐœ์˜ ์›์†Œ๊ฐ„์˜ & ๋ฅผ ํ•˜๋ฉด ๋ญ”๊ฐ€ ๋ ๊ฒƒ
    ๊ฐ™๋‹ค๋Š” ๋Š๋‚Œ์ด ์˜ด,
    : ์—ฌ๊ธฐ์„œ ์•Œ์•„์•ผ ํ• ๊ฒŒ ์ธ๋ฑ์Šค ์ž๋ฆฌ์˜ ์œ„์น˜๊ฐ’์€ 2์˜ ์ œ๊ณฑ์ด๋ผ๋Š” ๊ฒƒ์ž„
    -> ๋ญ” ์†Œ๋ฆฌ๋ƒ๋ฉด string fruit[4] = { "์‚ฌ๊ณผ","๊ทค","ํฌ๋„","๋”ธ๊ธฐ" };

    ์‚ฌ๊ณผ : -> 0 0 0 1 => 1
    ๊ทค : -> 0 0 1 0 => 2
    ํฌ๋„ : -> 0 1 0 0 => 4
    ๋”ธ๊ธฐ : -> 1 0 0 0 => 8
    ์ด๋‹ค.

์–ด์ฐจํ”ผ for๋ฌธ์œผ๋กœ 4๊ฐœ๋ฅผ ๋Œ๋ฆฌ๋ฉด์„œ ์กฐํ•ฉํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ด๋ฏ€๋กœ
๊ฐ ์›์†Œ๋“ค์˜ ์œ„์น˜๊ฐ’๊ณผ i๋ฅผ & ํ•˜์ž๋Š” ์ด์•ผ๊ธฐ์ž„.

๊ฒฐ๊ณผ :
for (int i = 0; i < (1 << 4) ; ++i)
{
	for(int j = 0; j < 4; j++)
    {
      i & (1 << j)
      // ์ด๋Ÿฐ์‹์œผ๋กœ ์ง„ํ–‰! 
    }
}

์†Œ์Šค์ฝ”๋“œ

: ์ง‘ํ•ฉ{a,b,c,d}๋ฅผ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ!

1) for๋ฌธ์„ ์–ด๋””๊นŒ์ง€ ๋Œ๋ฆด์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, 0์—์„œ 16๋ฏธ๋งŒ ๊นŒ์ง€์ด๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ for(int i = 0; i < (1 << size); i++) ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
2) & ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๊ฒฐ๊ณผ๊ฐ€ 1์ด๋ฉด ์ถœ๋ ฅํ•˜๊ณ , ์•„๋‹ˆ๋ฉด PASS
A๊ฐ€ ์žˆ์Œ์œผ๋กœ ๋‚˜์˜ค๊ฒŒ ํ•˜๋ ค๋ฉด ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๊ฐ€ "1" ์ด์–ด์•ผ ํ•œ๋‹ค.
์ผ๋‹จ ๊ฐ€์žฅ ํฐ for๋ฌธ์€ 0 ์—์„œ๋ถ€ํ„ฐ 15๊นŒ์ง€ ๋ˆ๋‹ค.
0000 -> 1111 ๊นŒ์ง€ ๋Œ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ธ๋ฐ , i๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€
(๋น„ํŠธ๋กœ ํ‘œํ˜„๋œ ์ง‘ํ•ฉ) & (1 < i) ๊ฒฐ๊ณผ๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ์กด์žฌ
ex) 2๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
: 0101 & (1 << 2) =>(๊ฒฐ๊ณผ) 0101 & 0100 = 0100 ์ด๋ฏ€๋กœ ์กด์žฌํ•œ๋‹ค.

#include <iostream>
using namespace std;

void printSubset(char *data, int cnt)
{
	int c = 0;
	for (int i = 0; i < (1 << cnt); i++)
	{
		cout << " { ";
		for (int j = 0; j < cnt; j++)
		{			
			c++;
			if (i & (1 << j))
				cout << data[j] << " ";
		}
		cout << " } " << endl;
	}

	cout << c << endl;
}
//0000
//0001
//0010
//0011

int main()
{
	char word[4] = { 'a', 'b', 'c', 'd' };
	printSubset(word, 4);

	return 0;

}

Problem 2๋ฒˆ.: ezsw ๋‹˜ ์ถœ์ฒ˜!

์—ฐ์Šต๋ฌธ์ œ : 1,2,3,4,5,6 ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ์˜ ์›์†Œ๋ฅผ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ•ฉ์ด 7์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”?
์ง‘ํ•ฉ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ!!


#include <string>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;


int arr[] = { 1,2,3,4,5,6 };

void solve()
{
	int cnt = 0;

	cout << "1,2,3,4,5,6์„ ํ•œ๋ฒˆ์”ฉ ๋งŒ ์‚ฌ์šฉํ•ด์„œ ๋”ํ•ด์„œ 7์ด ๋‚˜์˜ฌ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”" << endl;
	//์กฐํ•ฉํ•ด์„œ ํ•ฉ์ด 7 ์ธ ๊ฒฝ์šฐ์˜ ์ง‘ํ•ฉ์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋„ ์ถœ๋ ฅํ•˜์ž.
	for (int i = 0; i < (1 << 6); i++)
	{
		vector<int>v;
		int sum = 0;
		for (int j = 0; j < 6; j++)
		{
        //0720 ์™œ ์ด๋ ‡๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์˜๋„๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•จ...
			if (i & (1 << j))
			{
				sum += arr[j];
				v.push_back(arr[j]);
			}
		}

		if (sum == 7)
		{
			cnt++;
			cout << "{";
			for(auto k : v)
			cout << k;
			cout << "}" << endl;
		}

	}
	cout << "7์„ ๋งŒ๋“  ํšŸ์ˆ˜๋Š” ?" << endl;
	cout << cnt;
}


int main()
{
	solve();
	

}

  • ํ’€์ด

๊ด€๋ จ ๋ฌธ์ œ

: ์นด์นด์˜ค 2019 ํ›„๋ณดํ‚ค

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด