๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก 

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Divide and Conquer)

by sh119 2024. 8. 2.

๐Ÿ‘ฉ‍๐Ÿ’ป  ๋ถ„ํ•  ์ •๋ณต ์ด๋ž€?

ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ex) ํ•ฉ๋ณ‘ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ์ด์ง„ ๊ฒ€์ƒ‰ ๋“ฑ

 

๋ถ„ํ•  ์ •๋ณต์˜ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์€ ๋ถ€๋ถ„๋“ค๋กœ ๋ถ„ํ•  ํ•œ๋‹ค.
  2. ๋ถ€๋ถ„๋“ค์„ ๊ฐ๊ฐ ์ •๋ณตํ•œ๋‹ค.
  3. ๋ถ€๋ถ„๋“ค์˜ ํ•ด๋‹ต์„ ํ†ตํ•ฉํ•˜์—ฌ ์›๋ž˜ ๋ฌธ์ œ์˜ ๋‹ต์„ ๊ตฌํ•œ๋‹ค.

 

โœ๏ธ ๋ถ„ํ•  ์ •๋ณต์˜ ์žฅ ๋‹จ์ 

์žฅ์ 

  • ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์–ด๋ ค์šด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ์ด์ ์ด ์žˆ์Œ (์„œ๋กœ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๊ณ , ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์‹ฑ์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ)

๋‹จ์ :

  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ(์žฌ๊ท€ ํ˜ธ์ถœ ๊ตฌ์กฐ)

 

โœ๏ธ ๋ถ„ํ•  ์ •๋ณต ์˜ˆ์‹œ

๊ณ„์† ๋ฐ˜์œผ๋กœ ์ž˜๋ผ๊ฐ€๋ฉฐ ๋ชจ๋‘ ๋ถ„ํ• ์ด ๋˜๋ฉด ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ์ฐพ๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์ตœ์ข… ๋‹ต์„ ์ฐพ์•„๊ฐ„๋‹ค.

public static int getMax(int[] arr, int left, int right){
	int mid = (left + rigth) / 2;
    if(left == right) return arr[left];
    
    left = getMax(arr, left, mid);
    right = getMax(arr, mid+1, right);
    
    return (left > right) ? left : right;
}