Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 7] 10 - ์ด๋ถ„ ๊ฒ€์ƒ‰

_์„ฑํ˜ธ_ 2022. 10. 9. 23:44
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 10 - ์ด๋ถ„ ๊ฒ€์ƒ‰

์ž„์˜์˜ N๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. N๊ฐœ์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ N๊ฐœ์˜ ์ˆ˜์ค‘ ํ•œ ๊ฐœ์˜ ์ˆ˜์ธ target์ด ์ฃผ์–ด์ง€๋ฉด ์ด๋ถ„ ๊ฒ€์ƒ‰์œผ๋กœ target์ด ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ ๋ช‡ ๋ฒˆ์งธ์— ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋‹จ, ์ค‘๋ณต๊ฐ’์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋ถ„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€โ“

  • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ •ํ•œ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ์ด๋ถ„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์œผ๋กœ ์ˆœ์ฐจ ๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)์— ๋น„ํ•˜๋ฉด ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์†ํ•œ๋‹ค. ๋‹ค์Œ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

ํ’€์ด ๋ฐฉ๋ฒ•

  • ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค. ์ด๋ถ„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.
  • ๋ฐฐ์—ด์˜ ์ฒ˜์Œ(start)๊ณผ ๋(end)์˜ ์ธ๋ฑ์Šค๋ฅผ ๋”ํ•œ ํ›„ 2๋กœ ๋‚˜๋ˆ„์–ด ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค(mid)์„ ๊ตฌํ•œ๋‹ค. ๋‹จ, ์ธ๋ฑ์Šค๋Š” ์†Œ์ˆ˜์ ์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Math.floor() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์†Œ์ˆ˜์  ์ดํ•˜๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค.
  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’(target)์ด ์ค‘๊ฐ„ ๊ฐ’(arr[mid])๋ณด๋‹ค ํฌ๋ฉด ์ค‘๊ฐ„ ๊ฐ’์„ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฐ’๋“ค์€ ํƒ์ƒ‰ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ค‘๊ฐ„ ๊ฐ’์„ ํฌํ•จํ•œ ์ƒ์œ„ ๊ฐ’๋“ค์€ ํƒ์ƒ‰ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ค‘๊ฐ„ ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด answer ๋ณ€์ˆ˜์— ์ค‘๊ฐ„ ์ธ๋ฑ์Šค(mid) + 1์„ ์ €์žฅํ•˜๊ณ  while ๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค. 

 

๐Ÿ“ ํ’€์ด

function solution(target, arr) {
  let answer;
  arr.sort((a, b) => a - b);
  let start = 0;
  let end = arr.length - 1;

  while (start <= end) {
    let mid = Math.floor((end + start) / 2);

    if (arr[mid] === target) {
      answer = mid + 1;
      break;
    } else if (arr[mid] < target) {
      start = mid + 1;
    } else {
      end = mid - 1;
    }
  }

  return answer;
}

let arr = [23, 87, 65, 12, 57, 32, 99, 81];
console.log(solution(32, arr));

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

https://kangworld.tistory.com/65

 

[Algorithm] ์ด์ง„ ํƒ์ƒ‰ (์ด๋ถ„ ํƒ์ƒ‰, Binary Search) ์ฝ”๋“œ์™€ ์‹œ๊ฐ„ ๋ณต์žก๋„

์ธํŠธ๋กœ ์ด์ง„ ํƒ์ƒ‰์ด๋ž€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด์ง„ ํƒ์ƒ‰์€ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.  ์ด

kangworld.tistory.com