๐Ÿ”ต brute force - ๋น„ํŠธ ๋งˆ์Šคํฌ ์‚ฌ์šฉํ•˜๊ธฐ

sery270ยท2021๋…„ 2์›” 22์ผ
1

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
3/5

์•ˆ๋…•ํ•˜์„ธ์š” :) ์˜ค๋Š˜์€ ๋น„ํŠธ ์—ฐ์‚ฐ ์‚ฌ์šฉํ•˜๋Š” BF ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์ •์ˆ˜๋กœ ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด, ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ํ™”์ดํŒ… ์ž…๋‹ˆ๋‹ค๐ŸŒฟ

๋น„ํŠธ์—ฐ์‚ฐ์ด๋ž€ ?

ํ•˜๋‚˜์˜ ์ •์ˆ˜๋กœ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด์–ด, ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋น„ํŠธ์—ฐ์‚ฐ์œผ๋กœ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š”, ์ง‘ํ•ฉ์—” ์ค‘๋ณต๋œ ์›์†Œ๊ฐ€ ์—†๊ณ , ๊ฐ ์›์†Œ๋“ค์— ๋Œ€ํ•ด ์œ ๋ฌด์˜ ์ƒํƒœ๋งŒ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด ์ง‘ํ•ฉ์˜ ๊ฐœ๋…์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด ๋น„ํŠธ ์—ฐ์‚ฐ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. 0๊ณผ 1์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๊ฐ€์ง€๋Š” 2์ง„์ˆ˜๋กœ ์ง‘ํ•ฉ์˜ ์›์†Œ ์œ ๋ฌด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰,

์ง‘ํ•ฉ์˜ ๊ฐ ์›์†Œ ๊ฐ’ n โ†’ ๋น„ํŠธ์˜ ์ž๋ฆฌ ์ˆ˜๋กœ ํ‘œํ˜„, 2์ง„์ˆ˜์˜ n๋ฒˆ์งธ ์ž๋ฆฌ์˜ 1๋กœ ํ‘œํ˜„
์ง‘ํ•ฉ โ†’ ํ•˜๋‚˜์˜ ์ •์ˆ˜๋กœ ํ‘œํ˜„, ํ•ด๋‹น 2์ง„์ˆ˜๋ฅผ 10์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•œ ๊ฐ’

์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆซ์ž๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{1,3,4,5,9} โ†’ 570 = 2^1 + 2^3 + 2^4 + 2^5 + 2^9

๋˜ํ•œ, ๋น„ํŠธ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ํฌ๊ฒŒ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Nํฌ๊ธฐ์˜ ์ง‘ํ•ฉ S ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ธฐ์กด ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ๋น„๊ตํ•œ๋‹ค๋ฉด N๋งŒํผ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Nํฌ๊ธฐ์˜ intํ˜• ๋ฐฐ์—ด vs intํ˜• ๋ณ€์ˆ˜ ํ•˜๋‚˜ โ†’ N๋งŒํผ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ฐจ์ด


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

and (&), or (|), xor (^)

  • ๋‘ ์ˆ˜๋ฅผ ๋น„ํŠธ ์—ฐ์‚ฐ ํ•˜๋Š” ๊ฒฝ์šฐ์—”, ๊ฐ€์žฅ ๋’ค์˜ ์ž๋ฆฌ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    0011011 & 1010011 = 0010011

    0011011 | 1010011 = 1011011

    0011011 ^ 1010011 = 1001000

not (~)

  • ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ 2์ง„์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ , ์ž๋ฆฌ์ˆ˜์— ๋”ฐ๋ผ not์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (int vs longlong)

    A = 01010011

    ~A (8๋น„ํŠธ, int) = 10101100

    ~A (32๋น„ํŠธ, longlong) = 11111111 11111111 11111111 10101100

  • unsigned, signed์— ๋”ฐ๋ผ์„  ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง„ ์•Š์ง€๋งŒ, ๋ณด์—ฌ์ง€๋Š” ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

shift left (<<), shift right (>>)

  • A << B : A๋ฅผ ์™ผ์ชฝ์œผ๋กœ B๋น„ํŠธ๋งŒํผ ๋ฏผ๋‹ค.

    • A << B : Aโˆ—2BA * 2^B

      1 << 0 = 1

      1 << 2 = 4 = 100

  • A >> B : A๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ B๋น„ํŠธ๋งŒํผ ๋ฏผ๋‹ค.

    • A << B : A/2BA / 2^B

      (a+b)/2 == (a+b)>>1


๋น„ํŠธ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ๋Œ€์ƒ

  • 0๋ถ€ํ„ฐ N-1๊นŒ์ง€ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • 1๋ถ€ํ„ฐ N๊นŒ์ง€์ธ ๊ฒฝ์šฐ์—๋Š”, ์•„๋ž˜์˜ ์ด์œ  ๋•Œ๋ฌธ์—, 0๋ถ€ํ„ฐ N-1๊นŒ์ง€๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
      • ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” 0๋ฒˆ์งธ ๋น„ํŠธ ๋•Œ๋ฌธ์—, ๊ณต๊ฐ„์ด 2๋ฐฐ ๋” ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
      • ๊ฐ์ข… ์—ฐ์‚ฐ์„ ๋ณ€ํ˜•ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋น„ํŠธ์—ฐ์‚ฐ ํ™œ์šฉ

์ง‘ํ•ฉ S์™€ ์›์†Œ a์— ๋Œ€ํ•˜์—ฌ,

S์— a๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ

S | (1 << a)

  • ์ด๋ฏธ ๊ฐ–๊ณ  ์žˆ๋Š” ์›์†Œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ๋ฌด์‹œ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ, ๋”ํ•˜๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ or์—ฐ์‚ฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

570 | 212^1 = 570 | (1<<1) = 570 (100011101021000111010_2)

570 | 222^2 = 570 | (1<<2) = 574 (100011111021000111110_2)

S์—์„œ a๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ

S & ~(1<<a)

  • a์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฆฌ์— 0, ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ 1์„ ๋‘” ๊ฒƒ๊ณผ and ์—ฐ์‚ฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

    570 & ~212^1 = 570 & ~(1<<1) = 568 (100011100021000111000_2)

    570 & ~222^2 = 570 & ~(1<<2) = 570 (100011101021000111010_2)

S์— a๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ

S & (1<<a)

  • ์œ„ ์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ, S์— a๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    S๊ฐ€ a๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    570 & 202^0 = 570 & (1<<0) = 0

    S๊ฐ€ a๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ
    570 & 212^1 = 570 & (1<<1) = 2

S์˜ a์— ๋Œ€ํ•ด ํ† ๊ธ€ํ•˜๊ธฐ

S ^ (1 << a)

  • ํ† ๊ธ€์ด๋ž€ 0์„ 1๋กœ, 1์„ 0์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • xor ์—ฐ์‚ฐ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜, ์ฆ‰ 0๊ณผ 1์— ๋Œ€ํ•œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋งŒ 1์ด๋ฏ€๋กœ, ํŠน์ • ์ž๋ฆฌ์ˆ˜์˜ ๊ฐ’์„ ํ† ๊ธ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • a ์ž๋ฆฌ์ˆ˜๊ฐ€ 0์ผ๋•, 0 ^ 1๋กœ, ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋ฉ๋‹ˆ๋‹ค.
    • a ์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ผ๋•, 1 ^ 1๋กœ, ๊ฒฐ๊ณผ๊ฐ€ 0์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ์œ ๋ฌด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

570 ^ 212^1 = 570 ^ (1<<1) = 568 (100011100021000111000_2)

570 ^ 222^2 = 570 ^ (1<<2) = 574 (100011111021000111110_2)

์ „์ฒด ์ง‘ํ•ฉ ํ‘œํ˜„ํ•˜๊ธฐ

(1 << N)-1

๊ณต์ง‘ํ•ฉ ํ‘œํ˜„ํ•˜๊ธฐ

0

  • ๊ณต์ง‘ํ•ฉ์€ ์ œ์™ธํ•˜๋ผ๋Š” ์กฐ๊ฑด์€, ํƒ์ƒ‰ ๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ์ž‘์„ 1๋ถ€ํ„ฐ ํ•˜์—ฌ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„ํŠธ์—ฐ์‚ฐ ์ฃผ์˜์‚ฌํ•ญ

  • 1 << N - 1์€ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„์— ์˜ํ•ด 1 << (N-1)๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ (1 << N) -1๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์˜๋„ํ•œ๋‹ค๋ฉด, ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ, 2์ง„์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ ธ, ๋น„ํŠธ์—ฐ์‚ฐ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.


profile
๊ฐœ๋ฐœ์„ธ๋ฆฌ์˜ ์„ฑ์žฅ๊ธฐ๐ŸŒฟ

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