Study/Java

[TIL] ์•Œ๊ณ ๋ฆฌ์ฆ˜

hong- 2022. 6. 10. 15:33

๐Ÿซถ๐Ÿป ์•Œ๊ณ ๋ฆฌ์ฆ˜ Algorithm

  - ์–ด๋– ํ•œ ์ž…๋ ฅ์ด ์žˆ๋‹ค๋ฉด ์ด ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋ช…๋ น์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์ž…๋ ฅ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์„ ๋„์ถœ

  - ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •


๐Ÿ‘๐Ÿป ๊ตฌํ˜„ implementation

  - ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ์ •์„ ์ปดํ“จํŒ… ์‚ฌ๊ณ ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„

  - ๊ตฌํ˜„์„ ์ž˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

    โ‘  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ

    โ‘ก ๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹ค์ˆ˜ ์—†์ด ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•จ

  - ๊ตฌํ˜„ ๋Šฅ๋ ฅ ํŒ๋ณ„ ๋ฐฉ๋ฒ• : ์™„์ „ํƒ์ƒ‰ (Brute force) & ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (Simulatiion)


 ๐Ÿ™๐Ÿป  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ Simulation

    - ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ

    - ๋ชจ๋“  ๊ณผ์ •๊ณผ ์กฐ๊ฑด์ด ์ œ์‹œ๋˜์–ด ๊ทธ ๊ณผ์ •์— ๊ฑฐ์นœ ๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธ


๐Ÿ™๐Ÿป  ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ :  BFA

   - ์ •๋‹ต์€ ๋ฌด์กฐ๊ฑด ๊ตฌํ•˜๋Š” ์น˜ํŠธํ‚ค

   - ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

   - ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ํ™•์ธํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹

   - ์ˆœ์ˆ˜ํ•œ ์ปดํ“จํŒ… ์„ฑ๋Šฅ์— ์˜์กดํ•˜์—ฌ ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์„ ์‹œ๋„ํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ

(1) ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์˜ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋Œ€๋žต์ ์œผ๋กœ ๊ณ„์‚ฐ
(2) ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋‹ค ๊ณ ๋ ค
(3) ์‹ค์ œ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ ์šฉ

  ๐Ÿ’ก ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… 

      - ํŠน์ •ํ•œ ์•”ํ˜ธ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

      - ์ง€๋Šฅํ˜• ์ „๋žต์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋งŽ์€ ์‹œํ–‰ ์ฐฉ์˜ค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•ดํ‚น


 ๐Ÿ“ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜

  โ‘  ๋‹จ์ˆœ Brute-Force

   - ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ• ๋Œ€์‹  ๋‹จ์ˆœํžˆ ๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ง

  โ‘ก ๋น„ํŠธ ๋งˆ์Šคํฌ

   - ๊ฐ ์›์†Œ๊ฐ€ ๋‘ ๊ฐ€์ง€ ์ƒํƒœ๋งŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

   - 2์ง„์ˆ˜ ํ‘œํ˜„ ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

   - ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ ์›์†Œ์— ํฌํ•จ๋˜๊ฑฐ๋‚˜ ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๋‘ ๊ฐ€์ง€ ์„ ํƒ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉ

  โ‘ข ์žฌ๊ท€ ํ•จ์ˆ˜

   - ์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ž‘์—… ์ค‘ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์„ ์ชผ๊ฐœ์–ด ํ•œ ์ž‘์—… ์‹คํ–‰ ํ›„ ๋‚˜๋จธ์ง€ ์ž‘์—…์„ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐ๊ณผ ์™„์„ฑ

   - ์›์†Œ๊ฐ€ ํฌํ•จ์ด ๋˜๋ฉด ์›์†Œ๋ฅผ ๋„ฃ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ์ƒํƒœ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ

  โ‘ฃ ์ˆœ์—ด

   - n๊ฐœ์˜ ๊ฐ’ ์ค‘์—์„œ r๊ฐœ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฝ‘๋Š” ๊ฒฝ์šฐ

  โ‘ค DFS / BFS (๊นŠ์ด์šฐ์„ /๋„ˆ๋น„์šฐ์„ )


 ๐Ÿ“์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

     : ํ”„๋กœ์„ธ์Šค ์†๋„ ๋†’์ผ ๋•Œ & ์—ฌ๋Ÿฌ ์†”๋ฃจ์…˜์„ ๊ฐ๊ฐ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

     โ‘  ์ˆœ์ฐจ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Sequential Search

      - ๋ฐฐ์—ด ์•ˆ์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰

     โ‘ก ๋ฌธ์ž์—ด ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Brute-Force String Matching

      - ๊ธธ์ด๊ฐ€ n์ธ ์ „์ฒด ๋ฌธ์ž์—ด๊ณผ ๊ธธ์ด๊ฐ€ m์ธ ๋ฌธ์ž์—ด ํŒจํ„ด์„ ํฌํ•จํ•˜๋Š”์ง€ ๊ฒ€์ƒ‰

     โ‘ข ์„ ํƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Selection Sort

      - ์ „์ฒด ๋ฐฐ์—ด์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ˜„์žฌ ์š”์†Œ์™€ ๋น„๊ตํ•˜๊ณ  ์ปฌ๋ ‰์…˜์ด ์™„์ „ํžˆ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ์š”์†Œ๋“ค๋ผ๋ฆฌ ๊ตํ™˜ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

      + ๊ทธ ์™ธ : ๋ฒ„๋ธ” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜, Tree ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP)


 ๐Ÿ“ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์ 

     - ํ•œ๊ณ„ : ๋ฌธ์ œ์˜ ๋ณต์žก๋„์— ๋งค์šฐ ๋ฏผ๊ฐ

         → ๋ฌธ์ œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜๋ก ํ•„์š”ํ•œ ์ž์›(์‹œ๊ฐ„, ์ปดํ“จํŒ… ์ž์› ๋“ฑ)์ด ๋งŽ์•„์ง

     - ์ฃผ์˜์  : ์ž…๋ ฅ์˜ ๊ฐœ์ˆ˜(N)์ด ์ ์„์ˆ˜๋ก ์ข‹์Œ

         → ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ N์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๋ณต์žก๋„ ์ฆ๊ฐ€


๐Ÿ‘๐Ÿป  ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 โ‘  ์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Linear Search Algorithm

 โ‘ก ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Binary Search Algorithm

 โ‘ข ํ•ด์‹œ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Hash search Algorithm


๐Ÿ™Œ๐Ÿป  ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : BSA

   - ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์— ์ ํ•ฉํ•œ ๊ณ ์† ํƒ์ƒ‰ ๋ฐฉ๋ฒ•

   - ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ ์ ˆ๋ฐ˜์”ฉ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ  ๋ถ„ํ•  ์ •๋ณต๊ธฐ๋ฒ•์œผ๋กœ ํŠน์ • ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

   - ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN) : ์‹œ๊ฐ„์ด ๋น ๋ฅด์ง€๋งŒ ํ•ญ์ƒ ์ข‹์€ ๊ฑด x

     → ๋ฐ์ดํ„ฐ ์–‘์ด ์ ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์•ž์ชฝ์— ์œ„์น˜ํ•œ๋‹ค๋ฉด ์„ ํ˜•ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ํ•ฉ

   - ์ฃผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ

     → ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์š”์†Ÿ๊ฐ’์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ

     → ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ

  * ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์™€(BST) ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(BSA) ์ฐจ์ด
   (1) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
     - ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๋‘ ๊ฐœ์˜ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
     - ์™ผ์ชฝ์—๋Š” ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ์—๋Š” ํฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ
   (2) ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

   ๐Ÿ“ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•œ๊ณ„

     - ๋ฐฐ์—ด์—๋งŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ & ์ •๋ ฌ๋˜์–ด์•ผ ๊ตฌํ˜„ ๊ฐ€๋Šฅ