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

[JavaScript/section 7] 11 - ๋ฎค์ง ๋น„๋””์˜ค

_์„ฑํ˜ธ_ 2022. 10. 10. 19:09
728x90
๋ฐ˜์‘ํ˜•

 ๐Ÿ“Œ 11 - ๋ฎค์ง ๋น„๋””์˜ค(๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)

DVD์—๋Š” ์ด N๊ฐœ์˜ ๊ณก์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, DVD์— ๋…นํ™”ํ•  ๋•Œ์—๋Š” ๋ผ์ด๋ธŒ์—์„œ์˜ ์ˆœ์„œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰ 1๋ฒˆ ๋…ธ๋ž˜์™€ 5๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๊ฐ™์€ DVD์— ๋…นํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 1๋ฒˆ๊ณผ 5๋ฒˆ ์‚ฌ์ด์˜ ๋ชจ๋“  ๋…ธ๋ž˜๋„ ๊ฐ™์€ DVD์— ๋…นํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ํ•œ ๋…ธ๋ž˜๋ฅผ ์ชผ๊ฐœ์„œ ๋‘ ๊ฐœ์˜ DVD์— ๋…นํ™”ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. M๊ฐœ์˜ DVD์— ๋ชจ๋“  ๋™์˜์ƒ์„ ๋…นํ™”ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด ๋•Œ DVD์˜ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  M๊ฐœ์˜ DVD๋Š” ๋ชจ๋‘ ๊ฐ™์€ ํฌ๊ธฐ์—ฌ์•ผ ์ œ์กฐ์›๊ฐ€๊ฐ€ ์ ๊ฒŒ ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ํ•ด์•ผ ํ•œ๋‹ค.

์œ„ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ฉด M๊ฐœ์˜ ๊ฐ™์€ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” DVD์— ์Œ์•…์„ ๋‹ด์•„์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ํฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ํŠน์ •ํ•œ ์ƒํ™ฉ์—์„œ ์ตœ์ ์˜ ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•œ ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€โ“ ์ด๋ถ„ ํƒ์ƒ‰๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ฃผ์–ด์ง„ ์ผ๋ จ์˜ ๊ฐ’๋“ค์ด ์•„๋‹ˆ๋ผ ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๋‚ด์—์„œ ์›ํ•˜๋Š” ๊ฐ’ ๋˜๋Š” ์›ํ•˜๋Š” ์กฐ๊ฑด์— ๊ฐ€์žฅ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฃผ์š” ํŠน์ง•์€ ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์ด ์žˆ๋”๋ผ๋„ ๊ฑฐ๊ธฐ์„œ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๊ฒƒ๋ณด๋‹ค ๋” ์ข‹์€ ์ตœ์ ์˜ ๋‹ต์ด ์žˆ๋Š”์ง€ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค

 

๐Ÿ‘ ํ’€์ด ๋ฐฉ๋ฒ•

์ตœ์ ์˜ ๋‹ต์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ while ๋ฌธ์€ lt๊ฐ€ rt๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ์ „๊นŒ์ง€ ํƒ์ƒ‰์„ ๊ณ„์† ํ•ด์•ผํ•œ๋‹ค.

  • lt๋Š” DVD๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ํฌ๊ธฐ์ด๋‹ค. ํ•œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ๋กœ ์ชผ๊ฐค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ์Œ์•…๋“ค ์ค‘ ์ œ์ผ ๊ธด ์Œ์•…์ด DVD๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ํฌ๊ธฐ๊ฐ€ ๋œ๋‹ค.
  • rt๋Š” DVD๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํฌ๊ธฐ์ด๋‹ค. songs ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์„ ์ €์žฅํ–ˆ๋Š”๋ฐ, ๋ถ€๋ฅธ ๊ณก์˜ ๊ธธ์ด๊ฐ€ 10,000๋ถ„์„ ๋„˜์ง€ ์•Š์œผ๋ฏ€๋กœ 10,000์œผ๋กœ ์ €์žฅํ•ด๋„ ๋œ๋‹ค. ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” ๋ถ€์ •ํ™•ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋ฉด ํ•œ๋ฒˆ ๋น„๊ตํ•  ๋•Œ๋งˆ๋‹ค ์ ˆ๋ฐ˜์”ฉ ํƒ์ƒ‰์—์„œ ์ œ์™ธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธˆ๋ฐฉ ์ตœ์ ์˜ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • count() ํ•จ์ˆ˜๋Š” DVD์˜ ํฌ๊ธฐ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ๋ชจ๋“  ๋…ธ๋ž˜๋ฅผ ๋‹ด๋Š”๋ฐ ๋ช‡ ๊ฐœ์˜  DVD๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
  • ํ•„์š”ํ•œ DVD์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ m๊ฐœ ์ดํ•˜์ด๋ฉด mid(DVD์˜ ํฌ๊ธฐ)๊ฐ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์ด๋ฏ€๋กœ answer์— mid๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋˜ํ•œ, DVD์˜ ์ตœ์†Œ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— mid ์ด์ƒ์˜ ๊ฐ’๋“ค์€ ํƒ์ƒ‰์—์„œ ์ œ์™ธ๋œ๋‹ค. rt = mid - 1
  • ํ•„์š”ํ•œ DVD์˜ ๊ฐœ์ˆ˜๊ฐ€ m๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด mid ์ดํ•˜์˜ ํฌ๊ธฐ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ mid ์ดํ•˜์˜ ๊ฐ’๋“ค์€ ํƒ์ƒ‰์—์„œ ์ œ์™ธ๋œ๋‹ค. lt = mid + 1

 

๐Ÿ“ ํ’€์ด

function count(songs, capacity) {
  let dvdCnt = 1;
  let sum = 0;

  for (let x of songs) {
    if (sum + x <= capacity) {
      sum += x;
    } else {
      dvdCnt++;
      sum = x;
    }
  }

  return dvdCnt;
}

function solution(m, songs) {
  let answer;
  let lt = Math.max(...songs);
  let rt = songs.reduce((sum, song) => (sum += song));

  while (lt <= rt) {
    let mid = Math.floor((lt + rt) / 2);

    if (count(songs, mid) <= m) {
      answer = mid;
      rt = mid - 1;
    } else {
      lt = mid + 1;
    }
  }

  return answer;
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(solution(3, arr));

 

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

https://ywtechit.tistory.com/305?category=958175 

 

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section07 - 11 - ๋ฎค์ง๋น„๋””์˜ค(๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๐Ÿ“ section07 - 11 - ๋ฎค์ง๋น„๋””์˜ค(๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์ด๋ถ„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ๋‹ค. ๋ณดํ†ต ์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•œ ๋ฌธ์ œ๋Š” ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ์„œ์น˜(Parametric Search) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Š”

ywtechit.tistory.com