๐Ÿ”Žํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ž…๊ตญ ์‹ฌ์‚ฌ [JS]

๋ฐ•๋ฏผ์šฐยท2023๋…„ 6์›” 10์ผ
1

๋ฌธ์ œ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ž…๊ตญ์‹ฌ์‚ฌ

์นดํ…Œ๊ณ ๋ฆฌ : ์ด๋ถ„ํƒ์ƒ‰

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://school.programmers.co.kr/learn/challenges


โœ๏ธ๋‚ด ํ’€์ด

์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ,

" ๋ชจ๋“  ์ž…๊ตญ์ž๊ฐ€ ๊ฐ ์‹ฌ์‚ฌ๊ด€์—๊ฒŒ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ, ๋ชจ๋“  ์ž…๊ตญ์ž์˜ ์‹ฌ์‚ฌ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก, ๊ฐ ์ž…๊ตญ์ž๋“ค ์‹ฌ์‚ฌ๊ด€์—๊ฒŒ ๋ฐฐ์ •ํ•ด์•ผ ํ•œ๋‹ค " ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๊ฐ ์‹ฌ์‚ฌ๊ด€๋งˆ๋‹ค ์ž…๊ตญ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์ •ํ•ด์•ผ ํ• ์ง€๋ฅผ ๊ณ ๋ฏผํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…๊ตญ์ž๊ฐ€ 5๋ช…์ด๊ณ , ๊ฐ ์‹ฌ์‚ฌ๊ด€๋“ค์ด 3๋ช…์ด๊ณ , ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ๋ช…์„ ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด [2, 3, 7] ์ด๋ผ๋ฉด

์‹ฌ์‚ฌ๊ด€1์‹ฌ์‚ฌ๊ด€2์‹ฌ์‚ฌ๊ด€3
500
410
311

์ด๋ ‡๊ฒŒ ๊ฐ case๋ฅผ ๋‚˜๋ˆ ์„œ, case๋งˆ๋‹ค ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ๊ฐ ์ž…๊ตญ์ž๋“ค์„ ์‹ฌ์‚ฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๊ณ , ์ด ๊ฐ’๋“ค์„ case๋งˆ๋‹ค ๋น„๊ตํ•ด์„œ, ๊ฐ€์žฅ ์ตœ์†Œ์ธ ๊ฐ’์„ ์ •๋‹ต์œผ๋กœ ํŒ๋‹จํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๊ฐ case๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€, ๊ฒฐ๊ตญ ๋ชจ๋“  case๋ฅผ ๋‹ค ํ•ด๋ด์•ผ ์ตœ์†Ÿ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๋„ˆ๋ฌด ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ์‚ฌ์‹ค ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ ์•ผํ•  ์ง€ ๊ฐ๋„ ์˜ค์ง€ ์•Š์•˜๋‹ค.


โœ’๏ธ Solution

์šฐ์„ ,

  • 10์–ต๋ช…์ด๋ฉด ์‚ฌ์‹ค ์„ ํ˜•์‹œ๊ฐ„(log n) ์œผ๋กœ๋Š” ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋กœ๊ทธ์‹œ๊ฐ„(log n) ์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค
  • ๋กœ๊ทธ ์‹œ๊ฐ„์ด๋ฉด ๋ณดํ†ต => ์ด์ง„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•œ๋‹ค !
  • ํ˜„์žฌ
    • ์ž…๊ตญ์ž ์ˆ˜ : ์ตœ๋Œ€ 10์–ต
    • ์‹ฌ์‚ฌ๊ด€์ด ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ : ์ตœ๋Œ€ 10์–ต
    • ์‹ฌ์‚ฌ๊ด€๋“ค์˜ ์ˆ˜ : ์ตœ๋Œ€ 10๋งŒ => ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ loop๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒŒ ์ข‹์„ ๋“ฏ

์œ„ 3๊ฐ€์ง€ ์‚ฌํ•ญ์„ ๋ฐ”ํƒ•์œผ๋กœ, ์ด ๋ฌธ์ œ์— ์ด์ง„ ํƒ์ƒ‰์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด,

  • ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ ์‹ฌ์‚ฌ๊ด€๋“ค์ด ๋ช‡ ๋ช…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ,

    ํŠน์ • ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์„ ๋•Œ, ๋ชจ๋“  ์‹ฌ์‚ฌ๊ด€๋“ค์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž…๊ตญ์ž๋“ค ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ฃผ์–ด์ง„ ์ž…๊ตญ์ž ์ˆ˜ n์„ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์‹œ๊ฐ„์„ ๋” ๋Š˜๋ฆฌ๊ณ , ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‹œ๊ฐ„์„ ๋” ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด์ง„ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋ฅผ ํ†ตํ•ด ์ฃผ์–ด์ง„ ์ž…๊ตญ์ž ์ˆ˜ n์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” ์ตœ์†Œ์˜ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

  • n๋ถ„์ด ์ง€๋‚ฌ์„ ๋•Œ, ๊ฐ ์‹ฌ์‚ฌ๊ด€ ๋‹น ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ž…๊ตญ์ž ์ˆ˜

    = n / ๊ฐ ์‹ฌ์‚ฌ๊ด€์˜ ์‹ฌ์‚ฌ ์‹œ๊ฐ„ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฆ‰, ๋‚˜์™€ solution์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๋ฉด

  • my : ๊ฐ ์‹ฌ์‚ฌ๊ด€์ด ๋ช‡ ๋ช…์„ ์ฒ˜๋ฆฌํ•  ์ง€ ๊ฒฐ์ • => ์ด ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ณ„์‚ฐ

  • solution : ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋จผ์ € ๊ฒฐ์ • => ๊ทธ ์‹œ๊ฐ„ ์•ˆ์— ๊ฐ ์‹ฌ์‚ฌ๊ด€๋“ค์ด ๋ช‡ ๋ช…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ณ„์‚ฐ

์„œ๋กœ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ ‘๊ทผํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


Binary Search ์ง„ํ–‰ ์‹œ, ์ฃผ์˜ํ•  ์ 

๊ธฐ๋ณธ Binary Search๋Š” ํŠน์ • ๊ฐ’ ๋˜๋Š” ํŠน์ • ๊ฐ’์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ,

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ํŠน์ • ๊ฐ’์„ ๊ฐ€์ง€๋Š” index์˜ ์ตœ์†Œ๊ฐ’ ์ด๋‹ค.

=> ์ฃผ์–ด์ง„ ์ž…๊ตญ์ž ์ˆ˜ n์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ์ตœ์†Œ์˜ ์‹œ๊ฐ„ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์œ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Binary Search ํƒ์ƒ‰ ์กฐ๊ฑด๊ณผ return ๊ฐ’์„ ์ˆ˜์ •ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.


solution์„ ๋ฐ”ํƒ•์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

function solution(n, times) {
    
  const sortedTimes = times.sort((a,b)=>a-b); 
  let left = 1;
  let right = sortedTimes[sortedTimes.length-1]*n; // ์ตœ๋Œ€๋กœ ํ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„ => ๊ฐ€์žฅ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์‹ฌ์‚ฌ๊ด€์ด ๋ชจ๋“  ์ž…๊ตญ์ž๋ฅผ ์‹ฌ์‚ฌํ•  ๋•Œ 

  while(left<=right){
      const mid = Math.floor((left+right)/2);

      let testedPeople=0;

      sortedTimes.map((testTime) => {
          return Math.floor(mid/testTime); // ๊ฐ ๋ฉด์ ‘ ์‹ฌ์‚ฌ๊ด€์ด mid๋ถ„์ด ์ง€๋‚ฌ์„ ๋•Œ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜
      }).forEach((testedPerson) => {
          testedPeople+=testedPerson;
      });

      if(testedPeople < n){
          left = mid+1;
      }
      else{
          right = mid - 1;
      }
  }

  return left;
}


โž• ์ฐพ์•„๋ณผ ๋‚ด์šฉ

  • ํƒ์ƒ‰ ์กฐ๊ฑด์— ๋”ฐ๋ผ Binary Search ์ฝ”๋“œ ๋ณ€ํ˜•ํ•˜๊ธฐ
profile
๊พธ์ค€ํžˆ, ๊นŠ๊ฒŒ

0๊ฐœ์˜ ๋Œ“๊ธ€