[TIL๐Ÿ”ฅ]Day5(8/6)

Introduction

์˜ค๋Š˜ ํŒ€์›๋“ค๊ณผ ๋Œ€๋ง์˜ ์ฒซ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.
๋‚ด๊ฐ€ ์ค€๋น„ํ•œ ๋‚ด์šฉ์„ ๋ฐœํ‘œํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์ด๋ผ ์‚ด์ง ๋–จ๋ ธ๋‹ค.
์•„์ง ๋ถ€์กฑํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์—ด์‹ฌํžˆ ์ค€๋น„ํ•ด์„œ ๋ฐœํ‘œ๋ฅผ ์ž˜ ๋๋งˆ์นœ ๋‚˜์—๊ฒŒ ์ž‘์€ ์นญ์ฐฌ์„ ๋ณด๋‚ธ๋‹ค~๐Ÿ‘ (๋‚˜๋ผ๋„ ๋‚˜๋ฅผ ์นญ์ฐฌํ•ด์•ผํ•˜๋Š” ์š”์ฆ˜)
ํŒ€์›๋“ค ์—ญ์‹œ ์ •๋ง ์—ด์‹ฌํžˆ ์ค€๋น„ํ•ด์ค˜์„œ ๋ฐฐ์›Œ๊ฐ€๋Š”๊ฒŒ ๋งŽ์•˜๋˜ ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€,,, ๊ฐ•์˜๋ฅผ ๋งŽ์ด ๋ชป๋“ค์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค...๐Ÿ˜น
์ฃผ๋ง 48์‹œ๊ฐ„ ๋™์•ˆ ๋นก๊ณตํ•  ๊ฒƒ์ด๋‹ค. (๋ฏธ๋ž˜์˜ ๋‚˜์—๊ฒŒ ๋งก๊ธฐ๊ธฐ)

์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฒƒ

์Šคํ„ฐ๋””๋กœ ๋‹ค์–‘ํ•œ ์ฃผ์ œ๋“ค์„ ๋ฐฐ์› ๋‹ค. ๋ณต์Šต ํ•„์ˆ˜!!

1. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ
2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ
3. ์Šค์ฝ”ํ”„ (๋‚˜์˜ ์ฃผ์ œ)
4. ํด๋กœ์ €
5. ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ
6. DOM ์กฐ์ž‘
7. ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง
8. ์ด์ง„ ํƒ์ƒ‰ - ๊ฐ•์˜

์˜ค๋Š˜์€ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์‹ค์Šต ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋˜ ์ด์ง„ ํƒ์ƒ‰์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•œ๋‹ค.

๐Ÿ’ซ ์ด์ง„ ํƒ์ƒ‰(Binary Search)

์ด์ง„ ํƒ์ƒ‰

  • ์ •๋ ฌ ๋˜์–ด์žˆ๋Š” ์š”์†Œ๋“ค์„ ๋ฐ˜์”ฉ ์ œ์™ธํ•˜๋ฉฐ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(log n)

์ด์ง„ํƒ์ƒ‰์˜ ํŠน์ง•

  • ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฐฐ์—ด ํ˜น์€ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ์ƒ๋‹นํžˆ ๋น ๋ฅด๋‹ค!

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

  • ์ด์ง„ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ด์ง„ ํŠธ๋ฆฌ
  • ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋ชจ์—ฌ์žˆ๊ณ , ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋ชจ์—ฌ์žˆ๋‹ค

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋ฌธ์ œ์ 

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ ํ•œ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
  • ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ ์ˆœ์ฐจ ํƒ์ƒ‰๊ณผ ๋™์ผํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง

[์‹ค์Šต] ์ž…๊ตญ ์‹ฌ์‚ฌ ๋ฌธ์ œ ํ’€์ด

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

๋‚˜์˜ ํ’€์ด

function solution(n, times) {
    times.sort((a,b) => b-a)
    let left = 1;
    let right = times[times.length-1] * n;
    let answer = right;
    while (left <= right){
        let count = 0;
        let mid = Math.floor((left+right)/2);
        times.forEach(value => {
            count += Math.floor(mid/value)
            if (count >= n){
                answer = Math.min(mid, answer);
            }
        })
        if (count < n){
            left = mid+1;
        }else{
            right = mid-1;
        }
        mid = Math.floor((left+right)/2);
    }
    return answer;
}

Comment

๋“œ๋””์–ด ํ•œ ์ฃผ๊ฐ€ ์ง€๋‚˜๊ฐ”๋‹ค. ๋ญ”๊ฐ€ 1์‹œ๊ฐ„ ๊ฐ™์€ ํ•œ ์ฃผ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
๋ฐฐ์›€๊ณผ ์ขŒ์ ˆ์˜ ์—ฐ์†์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„๋“ค์ด ์Œ“์—ฌ ์–ด๋Š ์ˆœ๊ฐ„
์„ฑ์žฅ์˜ ๋ชจ๋จผํŠธ๊ฐ€ ์˜ค๊ธธ ๋ฐ”๋ผ๋ณธ๋‹ค. ์˜ค๋Š˜์€ ๊ฐ•์˜๋ฅผ ์ข€ ๋” ๋“ฃ๊ณ , ์ฃผ๋ง์— ํ•  ์ผ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ์ž˜ ์˜ˆ์ •์ด๋‹ค. ํ™”์ดํŒ…!!!

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ