๐Ÿถ Programming/Algorithm

4. Array Extra ๋ฐฐ์—ด

์ง€ ์› 2022. 10. 15. 11:29

์™„์ „ ๊ฒ€์ƒ‰ (Exaustive Search)

  • ์™„์ „ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์€ ๋ฌธ์ œ์˜ ํ•ด๋ฒ•์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜์—ดํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
  • Brute-force ํ˜น์€ generate-and-test ๊ธฐ๋ฒ•์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ ์šด๋‹ค.
  • ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธ ํ•œ ํ›„, ์ตœ์ข… ํ•ด๋ฒ•์„ ๋„์ถœํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰ ์†๋„๋Š” ๋Š๋ฆฌ์ง€๋งŒ, ํ•ด๋‹ต์„ ์ฐพ์•„๋‚ด์ง€ ๋ชปํ•  ํ™•๋ฅ ์ด ์ž‘๋‹ค.
  • ์ž๊ฒฉ๊ฒ€์ •ํ‰๊ฐ€ ๋“ฑ์—์„œ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, ์šฐ์„  ์™„์ „ ๊ฒ€์ƒ‰์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํ•ด๋‹ต์„ ๋„์ถœํ•œ ํ›„, ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•ด๋‹ต์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

 

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy)

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์  ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ทผ์‹œ์•ˆ์ ์ธ ๋ฐฉ๋ฒ•

 

์—ฌ๋Ÿฌ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ์ˆœ๊ฐ„์— ์ตœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ์„ ์„ ํƒํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์— ๋„๋‹ฌํ•œ๋‹ค.

๊ฐ ์„ ํƒ์˜ ์‹œ์ ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฐ์ •์€ ์ง€์—ญ์ ์œผ๋กœ๋Š” ์ตœ์ ์ด์ง€๋งŒ, ๊ทธ ์„ ํƒ ๋“ค์„ ๊ณ„์† ์ˆ˜์ง‘ํ•˜์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜์—ฌ, ๊ทธ๊ฒƒ์ด ์ตœ์ ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ, ๋จธ๋ฆฟ์†์— ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ์„ ๊ฒ€์ฆ ์—†์ด ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๋Š” Greedy ์ ‘๊ทผ์ด ๋œ๋‹ค.

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘ ๊ณผ์ •

  • ํ•ด ์„ ํƒ : ํ˜„์žฌ ์ƒํƒœ์—์„œ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์  ํ•ด๋ฅผ ๊ตฌํ•œ ๋’ค, ์ด๋ฅผ ๋ถ€๋ถ„ ํ•ด ์ง‘ํ•ฉ (Solution Set)์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€์‚ฌ : ์ƒˆ๋กœ์šด ๋ถ€๋ถ„ ํ•ด ์ง‘ํ•ฉ์ด ์‹คํ–‰ ๊ฐ€๋Šฅ ํ•œ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. ๊ณง, ๋ฌธ์ œ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๋Š” ์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.
  • ํ•ด ๊ฒ€์‚ฌ : ์ƒˆ๋กœ์šด ๋ถ€๋ถ„ ํ•ด ์ง‘ํ•ฉ์ด ๋ฌธ์ œ์˜ ํ•ด๊ฐ€ ๋˜๋Š” ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์•„์ง ์ „์ฒด ๋ฌธ์ œ์˜ ํ•ด๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด 1)์˜ ํ•ด ์„ ํƒ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.

 

๋น„ํŠธ ์—ฐ์‚ฐ์ž

๋น„ํŠธ ์—ฐ์‚ฐ์ž

& ๋น„ํŠธ ๋‹จ์œ„๋กœ AND ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

| ๋น„ํŠธ ๋‹จ์œ„๋กœ OR ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

<< ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ( x2 )

>> ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ( /2 )

 

<< ์—ฐ์‚ฐ์ž

1<<n : 2n** ์ฆ‰ ์›์†Œ๊ฐ€ n๊ฐœ์ผ ๊ฒฝ์šฐ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

& ์—ฐ์‚ฐ์ž

i&(1<<j) : i์˜ j๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.

๊ฑฐ์ง“ - 0 ๋ฐ˜ํ™˜.

 

๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ถ€๋ถ„์ง‘ํ•ฉ ์ƒ์„ฑํ•˜๊ธฐ

arr = [3, 6, 7, 1, 5, 4]
n = len(arr)   # n : ์›์†Œ์˜ ๊ฐœ์ˆ˜

for i in range(1<<n):
    for j in range(n):
        if i & (1<<j):
            print(arr[j], end=', ')
    print()
print()

 

์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๋ผ๋Š” ์šฉ์–ด๋Š” Database์—์„œ ์œ ๋ž˜ํ–ˆ์œผ๋ฉฐ, ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋™์ž‘ ์†๋„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋Š”๋‹ค. Database ๋ถ„์•ผ๊ฐ€ ์•„๋‹Œ ๊ณณ์—์„œ๋Š” Look up table๋“ฑ์˜ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์€ ๋ณดํ†ต ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„๋ณด๋‹ค ์ž‘๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ณดํ†ต ์ธ๋ฑ์Šค๋Š” ํ‚ค-ํ•„๋“œ๋งŒ ๊ฐ–๊ณ  ์žˆ๊ณ , ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์„ธ๋ถ€ ํ•ญ๋ชฉ๋“ค์€ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ์ธ๋ฑ์Šค

๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ณ€ ์ •๋ ฌํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ˜์‘์€ ๋Š๋ ค์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์ด๋Ÿฌํ•œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์›๋ณธ ๋ฐ์ดํ„ฐ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋  ๊ฒฝ์šฐ ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

'๐Ÿถ Programming > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

5. Search ๊ฒ€์ƒ‰  (0) 2022.10.19
3. Sort ์ •๋ ฌ  (0) 2022.10.02
2. Array ๋ฐฐ์—ด  (2) 2022.10.01
1. Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜  (4) 2022.09.29